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

Christian MICHON <[email protected]> Thu, 30 Apr 2015 10:50:44 +0200
Newsgroups gmane.comp.lang.jruby.user
Message-ID <CACx2yF8rL-1UQPq82H0+JYms=SjY9bLptxBw5Qy4KHoGgSn-4Q@mail.gmail.com>
--089e01419e2aefa30b0514ed30cc
Content-Type: text/plain; charset=UTF-8

Fishwife seems to be a well maintained product.

Yet it may not work with legacy rack applications, as it is not compatible
with ruby 1.8 mode. In 1.8 mode, you'll get systematically the following
500 error:
[qtp1296674576-15] ERROR fishwife.RackServlet - On service: uninitialized
constant Fishwife::RackServlet::ASCII_8BIT

But thanks for mentioning this gem Theo. :-)

On Thu, Apr 30, 2015 at 9:21 AM, Theo Hultberg <[email protected]> wrote:

> Christian, my bad, last I checked it was dead, but looking at the repo now
> it has had some activity. That said, the diff between now and two years ago
> is just updates between maintenance releases of Jetty and a setting for the
> min number of threads, so I'll revise my statement to "it basically hasn't
> been updated in years". That doesn't mean that it's bad or unstable, just
> that it might be hard to get bugs fixed.
>
> T#
>
> On Thu, Apr 30, 2015 at 8:10 AM, Christian MICHON <
> [email protected]> wrote:
>
>> @Theo:
>>
>> A small correction is needed on this specific sentence: "Mizuno is the
>> precursor to Fishwife, and it hasn't been updated in years"
>>
>> Mizuno had a new release 1 week ago and the last one before was less than
>> 9 months ago...
>>
>>
>> On Thu, Apr 30, 2015 at 8:00 AM, Theo Hultberg <[email protected]> wrote:
>>
>>> 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
>>>>>
>>>>
>>>>
>>>
>>
>>
>> --
>> Christian
>>
>
>


-- 
Christian

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

<div dir=3D"ltr">Fishwife seems to be a well maintained product.<div><br></=
div><div>Yet it may not work with legacy rack applications, as it is not co=
mpatible with ruby 1.8 mode. In 1.8 mode, you&#39;ll get systematically the=
 following 500 error:<div>[qtp1296674576-15] ERROR fishwife.RackServlet - O=
n service: uninitialized constant Fishwife::RackServlet::ASCII_8BIT<br></di=
v><div><br></div><div>But thanks for mentioning this gem Theo. :-)</div></d=
iv></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Thu, =
Apr 30, 2015 at 9:21 AM, Theo Hultberg <span dir=3D"ltr">&lt;<a href=3D"mai=
lto:[email protected]" target=3D"_blank">[email protected]</a>&gt;</span> wro=
te:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Christian, my bad, l=
ast I checked it was dead, but looking at the repo now it has had some acti=
vity. That said, the diff between now and two years ago is just updates bet=
ween maintenance releases of Jetty and a setting for the min number of thre=
ads, so I&#39;ll revise my statement to &quot;it=C2=A0basically hasn&#39;t =
been updated in years&quot;. That doesn&#39;t mean that it&#39;s bad or uns=
table, just that it might be hard to get bugs fixed.<span class=3D"HOEnZb">=
<font color=3D"#888888"><div><br></div><div>T#</div></font></span></div><di=
v class=3D"HOEnZb"><div class=3D"h5"><div class=3D"gmail_extra"><br><div cl=
ass=3D"gmail_quote">On Thu, Apr 30, 2015 at 8:10 AM, Christian MICHON <span=
 dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_b=
lank">[email protected]</a>&gt;</span> wrote:<br><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><div dir=3D"ltr">@Theo:<div><br></div><div>A small correction=
 is needed on this specific sentence: &quot;<span style=3D"font-size:12.800=
0001907349px">Mizuno is the precursor to Fishwife, and it hasn&#39;t been u=
pdated in years&quot;</span><div><span style=3D"font-size:12.8000001907349p=
x"><br></span></div><div><span style=3D"font-size:12.8000001907349px">Mizun=
o had a new release 1 week ago and the last one before was less than 9 mont=
hs ago...<br></span><div><br></div></div></div></div><div class=3D"gmail_ex=
tra"><div><div><br><div class=3D"gmail_quote">On Thu, Apr 30, 2015 at 8:00 =
AM, Theo Hultberg <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]"=
 target=3D"_blank">[email protected]</a>&gt;</span> wrote:<br><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><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 use=
d most of them, for two use cases: embedded status APIs in long running app=
lications and as the primary interface for applications with a HTTP API.</d=
iv><div><br></div><div>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&#39;t work wh=
en run that way because they assume they will be able to muck about with th=
e file system any way they like, or because they need to be in control, the=
y need to be the container of the application.</div><div><br></div><div>The=
se are the servers we&#39;ve tried, and our experience. If your use case is=
 different, for example 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 significant bugs and can be embedded. It&#39;s not perfect, but=
 it works well for us.<div><br></div><div>* Mizuno is the precursor to Fish=
wife, and it hasn&#39;t been updated in years.<br><div><br></div><div>* Pum=
a is nice and I&#39;d really like to use it, but the error handling is bugg=
y. It has often filled up disks with error messages. I think the worst of t=
his has been fixed, but in our experience it doesn&#39;t handle connection =
errors very well. We stay well away from Puma.</div><div><br></div><div>* J=
ubilee showed some great promise but then development stopped. We haven&#39=
;t tried the last released version, but the last version we tried had signi=
ficant bugs around request body handling.</div><div><br></div><div>* rack-j=
etty was abandoned 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><di=
v>* Torquebox is also not embeddable, and version 4 is starting to feel lik=
e 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 use case is very different from serving a Rails application=
, so your experience will probably be different.</div><span><font color=3D"=
#888888"><div><br></div><div>T#</div></font></span></div></div><div><div><d=
iv class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Wed, Apr 29, 201=
5 at 12:04 AM, Benjamin Ortega <span dir=3D"ltr">&lt;<a href=3D"mailto:ben.=
[email protected]" target=3D"_blank">[email protected]</a>&gt;</span> wro=
te:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">We use Trinidad (mul=
tithreaded) and are satisfied with it. It&#39;s fast enough and it scales a=
nd can be monitored nicely. We use Passenger for MRI apps and have consider=
ed standardizing on Passenger or puma for everything, but don&#39;t have an=
y 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.</div><=
/div></div></div></div><div><div><div class=3D"gmail_extra"><br><div class=
=3D"gmail_quote">On Tue, Apr 28, 2015 at 4:34 PM, Christian MICHON <span di=
r=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blan=
k">[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div dir=3D"ltr">Mizuno (jetty).<div>- fastest from what I measu=
red with apache-bench on my machines</div><div>- simplest configuration (al=
most none)</div><div><br></div><div>Only drawback: CTRL-C does not work wel=
l on Windows (the java process will be detached and will keep running), you=
 might need to implement a shutdown hook in your app.</div></div><div class=
=3D"gmail_extra"><div><div><br><div class=3D"gmail_quote">On Mon, Apr 27, 2=
015 at 9:29 PM, Doug Hathaway <span dir=3D"ltr">&lt;<a href=3D"mailto:dmh.d=
[email protected]" target=3D"_blank">[email protected]</a>&gt;</span> wrote:<b=
r><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:=
1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Tomcat deployed via Warbl=
er.</div><div class=3D"gmail_extra"><span><br><div class=3D"gmail_quote">On=
 Mon, Apr 27, 2015 at 12:55 PM, John Joseph Bachir <span dir=3D"ltr">&lt;<a=
 href=3D"mailto:[email protected]" target=3D"_blank">johnjosephbac=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr">Which Rack web server are folks using with JRuby? Any particula=
rly bad or good experiences?<div><br></div><div>I suppose the only ones tha=
t support threading are Puma and Passenger?</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>
</div></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><br clear=3D"all"><div><br></div>-- <br>=
<div class=3D"gmail_signature">Christian<br></div>
</div>

--089e01419e2aefa30b0514ed30cc--