Re: [jruby-user] Which Rack web server?

Theo Hultberg <[email protected]> Thu, 30 Apr 2015 08:00:03 +0200
Newsgroups gmane.comp.lang.jruby.user
Message-ID <CAMR1f-f_udvWRA4iLja6_EaWV_NtJF_YAQ6u4Vyx2J8M_wTPvQ@mail.gmail.com>
--90e6ba3fd387baf3030514eacfd9
Content-Type: text/plain; charset=UTF-8

Our experience is that there doesn't exist a good, correct, performant rack
server for JRuby. We've used most of them, for two use cases: embedded
status APIs in long running applications and as the primary interface for
applications with a HTTP API.

We package our applications as standalone JAR files with JRuby and all
gems, and run them with `java -jar ...`, and this rules our some of the
options. Either because some servers just don't work when run that way
because they assume they will be able to muck about with the file system
any way they like, or because they need to be in control, they need to be
the container of the application.

These are the servers we've tried, and our experience. If your use case is
different, for example serving Rails apps, this may not be your experience:

* Fishwife is the only one we've found that doesn't have significant bugs
and can be embedded. It's not perfect, but it works well for us.

* Mizuno is the precursor to Fishwife, and it hasn't been updated in years.

* Puma is nice and I'd really like to use it, but the error handling is
buggy. It has often filled up disks with error messages. I think the worst
of this has been fixed, but in our experience it doesn't handle connection
errors very well. We stay well away from Puma.

* Jubilee showed some great promise but then development stopped. We
haven't tried the last released version, but the last version we tried had
significant bugs around request body handling.

* rack-jetty was abandoned several years ago and doesn't handle request
bodies over 4 KiB.

* I'm not aware of any major bugs in Trinidad, but it doesn't work when
embedded.

* Torquebox is also not embeddable, and version 4 is starting to feel like
vaporware.

* WEBrick works surprisingly well for status APIs that don't get called
very often.

As I said, our use case is very different from serving a Rails application,
so your experience will probably be different.

T#

On Wed, Apr 29, 2015 at 12:04 AM, Benjamin Ortega <[email protected]>
wrote:

> We use Trinidad (multithreaded) and are satisfied with it. It's fast
> enough and it scales and can be monitored nicely. We use Passenger for MRI
> apps and have considered standardizing on Passenger or puma for everything,
> but don't have any specific plans to do so.
>
> FWIW I think you have to buy Passenger Enterprise to run your app
> multithreaded on Passenger.
>
> On Tue, Apr 28, 2015 at 4:34 PM, Christian MICHON <
> [email protected]> wrote:
>
>> Mizuno (jetty).
>> - fastest from what I measured with apache-bench on my machines
>> - simplest configuration (almost none)
>>
>> Only drawback: CTRL-C does not work well on Windows (the java process
>> will be detached and will keep running), you might need to implement a
>> shutdown hook in your app.
>>
>> On Mon, Apr 27, 2015 at 9:29 PM, Doug Hathaway <[email protected]>
>> wrote:
>>
>>> Tomcat deployed via Warbler.
>>>
>>> On Mon, Apr 27, 2015 at 12:55 PM, John Joseph Bachir <
>>> [email protected]> wrote:
>>>
>>>> Which Rack web server are folks using with JRuby? Any particularly bad
>>>> or good experiences?
>>>>
>>>> I suppose the only ones that support threading are Puma and Passenger?
>>>>
>>>
>>>
>>>
>>> --
>>> *Doug Hathaway*
>>> http://www.dadesystems.com/
>>> [email protected]
>>> (407) 680-3631
>>>
>>
>>
>>
>> --
>> Christian
>>
>
>

--90e6ba3fd387baf3030514eacfd9
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Our experience is that there doesn&#39;t exist a good=
, correct, performant rack server for JRuby. We&#39;ve used most of them, f=
or two use cases: embedded status APIs in long running applications and as =
the primary interface for applications with a HTTP API.</div><div><br></div=
><div>We package our applications as standalone JAR files with JRuby and al=
l gems, and run them with `java -jar ...`, and this rules our some of the o=
ptions. Either because some servers just don&#39;t work when run that way b=
ecause they assume they will be able to muck about with the file system any=
 way they like, or because they need to be in control, they need to be the =
container of the application.</div><div><br></div><div>These are the server=
s we&#39;ve tried, and our experience. If your use case is different, for e=
xample serving Rails apps, this may not be your experience:</div><div><br><=
/div>* Fishwife is the only one we&#39;ve found that doesn&#39;t have signi=
ficant bugs and can be embedded. It&#39;s not perfect, but it works well fo=
r us.<div><br></div><div>* Mizuno is the precursor to Fishwife, and it hasn=
&#39;t been updated in years.<br><div><br></div><div>* Puma is nice and I&#=
39;d really like to use it, but the error handling is buggy. It has often f=
illed up disks with error messages. I think the worst of this has been fixe=
d, but in our experience it doesn&#39;t handle connection errors very well.=
 We stay well away from Puma.</div><div><br></div><div>* Jubilee showed som=
e great promise but then development stopped. We haven&#39;t tried the last=
 released version, but the last version we tried had significant bugs aroun=
d request body handling.</div><div><br></div><div>* rack-jetty was abandone=
d several years ago and doesn&#39;t handle request bodies over 4 KiB.</div>=
<div><br></div><div>* I&#39;m not aware of any major bugs in Trinidad, but =
it doesn&#39;t work when embedded.</div><div><br></div><div>* Torquebox is =
also not embeddable, and version 4 is starting to feel like vaporware.</div=
><div><br></div><div>* WEBrick works surprisingly well for status APIs that=
 don&#39;t get called very often.</div><div><br></div><div>As I said, our u=
se case is very different from serving a Rails application, so your experie=
nce will probably be different.</div><div><br></div><div>T#</div></div></di=
v><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Wed, Apr 29,=
 2015 at 12:04 AM, Benjamin Ortega <span dir=3D"ltr">&lt;<a href=3D"mailto:=
[email protected]" target=3D"_blank">[email protected]</a>&gt;</span>=
 wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">We use Trinidad =
(multithreaded) and are satisfied with it. It&#39;s fast enough and it scal=
es and can be monitored nicely. We use Passenger for MRI apps and have cons=
idered standardizing on Passenger or puma for everything, but don&#39;t hav=
e any specific plans to do so.<div><br><div><div><div>FWIW I think you have=
 to buy Passenger Enterprise to run your app multithreaded on Passenger.</d=
iv></div></div></div></div><div class=3D"HOEnZb"><div class=3D"h5"><div cla=
ss=3D"gmail_extra"><br><div class=3D"gmail_quote">On Tue, Apr 28, 2015 at 4=
:34 PM, Christian MICHON <span dir=3D"ltr">&lt;<a href=3D"mailto:christian.=
[email protected]" target=3D"_blank">[email protected]</a>&gt;</spa=
n> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Mizuno (jetty)=
.<div>- fastest from what I measured with apache-bench on my machines</div>=
<div>- simplest configuration (almost none)</div><div><br></div><div>Only d=
rawback: CTRL-C does not work well on Windows (the java process will be det=
ached and will keep running), you might need to implement a shutdown hook i=
n your app.</div></div><div class=3D"gmail_extra"><div><div><br><div class=
=3D"gmail_quote">On Mon, Apr 27, 2015 at 9:29 PM, Doug Hathaway <span dir=
=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">dmh.da=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">Tomcat deployed via Warbler.</div><div class=3D"gmail_extra"><sp=
an><br><div class=3D"gmail_quote">On Mon, Apr 27, 2015 at 12:55 PM, John Jo=
seph Bachir <span dir=3D"ltr">&lt;<a href=3D"mailto:johnjosephbachir@gmail.=
com" target=3D"_blank">[email protected]</a>&gt;</span> wrote:<br>=
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Which Rack web server are f=
olks using with JRuby? Any particularly bad or good experiences?<div><br></=
div><div>I suppose the only ones that support threading are Puma and Passen=
ger?</div></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></span><span><font =
color=3D"#888888">-- <br><div><div dir=3D"ltr"><b>Doug Hathaway</b><div><a =
href=3D"http://www.dadesystems.com/" target=3D"_blank">http://www.dadesyste=
ms.com/</a></div><div><a href=3D"mailto:[email protected]" target=3D"_bl=
ank">[email protected]</a><br><a href=3D"tel:%28407%29%20680-3631" value=
=3D"+14076803631" target=3D"_blank">(407) 680-3631</a><br></div></div></div=
>
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span><=
font color=3D"#888888">-- <br><div>Christian<br></div>
</font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>

--90e6ba3fd387baf3030514eacfd9--