No. http://puma.io/
No. http://puma.io/
I also wrote this gem that tunes the number of Puma workers and resets any workers where a memory leak is detected: http://github.com/schneems/puma_auto_tune
I look forward to your talk at Ancient City Ruby next week!
[1] https://devcenter.heroku.com/articles/deploying-rails-applic...
On Cedar, we recommend Unicorn as the webserver. Regardless of the webserver you choose, production apps should always specify the webserver explicitly in the Procfile.
[1]: https://devcenter.heroku.com/articles/ruby-support#rails-4-x...
I would expect these to be fixed by now, and for certain setups it simply wouldn't be an issue, but definitely put a bit caveat in "Use Puma!"
Performance wise we saw it actually be worse than Unicorn at my former company. There were a few issues but the biggest one was no out of band GC at the time, so GC time was part of the requests and something a user saw. There were some use cases where it should have destroyed Unicorn but still strangely lagged (threaded, high IO operations. Should have been able to do far more with less since Puma continues to serve while Unicorn workers will wait). Memory usage did seem better.
We ended up back on Unicorn after a few weeks of fighting. I would imagine it to be better now (no longer deal with servers at all, so no idea), but I found the dissonance between everyone heaping love on Puma at the time and the actual experience jarring.
It seemed like a fantastic project, but at the time only for certain projects and certain infrastructure setups while Unicorn was fairly bulletproof.
Of course all of this is old knowledge and with the people who are involved in the project I expect things are far better these days. Caveat lector and such. :D
http://ylan.segal-family.com/blog/2013/05/20/unicorn-vs-puma...
At any rate, Unicorn would still be better than the default Heroku server.
We fire up sidekiq and clockwork in threads within the puma process rather than take ~ 100 MiB/process hit of running them separately.
If not, I would love it if you wrote one. :)
https://github.com/steakknife/rails41rc_plus_hacks_and_threa...
Feedback requested in the issue tracker. Anything that seems out of place.
[0] http://www.slideshare.net/heroku/heroku-secrets-waza-2013
There is no "default Heroku server" you get exactly what you specify. If you specify nothing you get what Rails runs by default which is webrick and happens to be awful in production. It's not that "Heroku has a bad default" here but rather Rails' default web server is not intended to run in Production. Most of our docs try to emphasize that you should be using another server other than webrick. Some people want to just bang out a proof of concept and not worry about configuring Puma or Unicorn, for them webrick is fine.
Does it use async/evented connection handling combined with a thread pool of workers handling requests?