Anyone used Puma on Heroku? Is it as simple as [1] or is there more configuration required [2] as is the case with Unicorn [3]?<p>[1] <a href="http://blog.steveklabnik.com/posts/2013-02-24-using-puma-on-heroku" rel="nofollow">http://blog.steveklabnik.com/posts/2013-02-24-using-puma-on-...</a><p>[2] <a href="http://www.subelsky.com/2012/10/setting-up-puma-rails-on-heroku.html" rel="nofollow">http://www.subelsky.com/2012/10/setting-up-puma-rails-on-her...</a><p>[3] <a href="https://devcenter.heroku.com/articles/rails-unicorn" rel="nofollow">https://devcenter.heroku.com/articles/rails-unicorn</a>
Can someone with more webserver knowledge please explain how puma works from a high level? I know very little about web servers so the following may not even make sense!<p>I have looked at the source, and it appears a thread pool will listen to incoming requests, and pass them to a reactor then move on to handle more requests. Another thread polls the sockets and writes the data to the response stream when ready. [Note: this all may be completely wrong!]<p>If the way the server works as above is correct, does it mean it's possible to achieve event-loop-based levels of concurrent connections along with good old CPU concurrency as well?
I like puma, but I thought it was interesting that the left passenger out of their performance graphs. Seems odd to omit the most popular ruby application server from the results.
Out of curiosity, why today?<p>I mean, this is not new at all, there is no major version that was released AFAIK...<p>This is great to share that though, just curious why it's on HN today? :)<p>Edit: typo fix.
I'm not a Rubyist, but if I'm reading the section of the README that describes the design [1] correctly, the closest Python equivalent (architecturally speaking) is Waitress [2].<p>[1] <a href="https://github.com/puma/puma#built-for-speed--concurrency" rel="nofollow">https://github.com/puma/puma#built-for-speed--concurrency</a><p>[2] <a href="http://docs.pylonsproject.org/projects/waitress/en/latest/design.html" rel="nofollow">http://docs.pylonsproject.org/projects/waitress/en/latest/de...</a>
Looks good. It would be nice to see it on the Web Framework Benchmarks (<a href="https://github.com/TechEmpower/FrameworkBenchmarks" rel="nofollow">https://github.com/TechEmpower/FrameworkBenchmarks</a>).<p>Edit: someone created an issue asking for contributors:
<a href="https://github.com/TechEmpower/FrameworkBenchmarks/issues/459" rel="nofollow">https://github.com/TechEmpower/FrameworkBenchmarks/issues/45...</a>
We (ShopKeep) are using Puma for our thin web-services around our platform. Specifically, we send all of our data to a two nodes load-balanced running Puma for our analytics aggregation. It's pretty amazing how a single instance running Puma replaces an entire cluster of Unicorn workers.<p>p.s. We are also hiring Ruby, and iOS folks. Contact information is in my profile.
I've been using Puma in dev/QA and it's impressive. I'm planning on trying it out in production but have a lot invested in Unicorn at the moment. For example, I have monit confs that kill workers once they reach a certain memory threshold and I'll have to figure out how to do that with Puma.
I'm one of the authors behind Phusion Passenger (<a href="https://www.phusionpassenger.com/" rel="nofollow">https://www.phusionpassenger.com/</a>), a polyglot web server for Ruby, Python and Node.js.<p>We've recently written a comprehensive comparison between Puma and Phusion Passenger, which you can read here: <a href="https://github.com/phusion/passenger/wiki/Puma-vs-Phusion-Passenger" rel="nofollow">https://github.com/phusion/passenger/wiki/Puma-vs-Phusion-Pa...</a>
The comparison covers things like concurrency models, I/O models, security, clustering, multi-app support, documentation, memory usage, performance and more. Although the comparison is between Puma and Phusion Passenger, a lot of the points are relevant to a Unicorn-Puma comparison as well.
Less memory usage then Unicorn here, though we recently moved to Passenger enterprise which is really similar: <a href="https://www.phusionpassenger.com/enterprise" rel="nofollow">https://www.phusionpassenger.com/enterprise</a><p>good writeup on the subject here: <a href="https://github.com/phusion/passenger/wiki/Puma-vs-Phusion-Passenger" rel="nofollow">https://github.com/phusion/passenger/wiki/Puma-vs-Phusion-Pa...</a>
I've been enjoying using Puma in clustered mode for some production sites, but falling back to Thin for Server Sent Events (new EventSource()) - does anyone know if this is ever likely to come to Puma, or is there a fundamental reason that the Puma process model can't support SSE?
Well. I have just come across this one which says Unicorn to be the best performing one. Apparently, Puma proves wrong even with multiple workers.<p><a href="https://gist.github.com/pbyrne/5218411" rel="nofollow">https://gist.github.com/pbyrne/5218411</a>