I kind of love Passenger for my Rails deployments. It Just Works, it does exactly what it should do, no muss, no fuss. I use Passenger with apache.
I very occasionally have a problem that I am not able to reproduce in my dev environment, and only seems to reproduce on production using Passenger apache. Note well: In every case so far, the problem actually had nothing to do with passenger or apache, there were other differences in environment that were causing it.
But still, being able to drop into a debugger in the Rails actually running under apache Passenger would have helped me find it quicker.
Support for dropping into the debugger, remotely, when running under Apache is included only in Passenger Enterprise. I recommend considering purchasing Passenger to support the Passenger team, the price is reasonable… for one server or two. But I admit I have not yet purchased Enterprise, mainly because the number of dev/staging/production servers I would want it on to have it everywhere starts to make the cost substantial for my environment.
But it looks like there’s a third-party open source gem meant to provide the same support! See https://github.com/davejamesmiller/ruby-debug-passenger . It’s two years old in fact, but just noticing it today myself, huh.
I haven’t tried it yet, but making this post as a note to myself and others who might want to give it a try.
The really exciting thing only in Passenger Enterprise, to me, is the way it can deploy with a hybrid multiple process+multi-threaded-request-dispatch setup. This is absolutely the best way to deploy under MRI, I have no doubts at all, it just is (and I’m surprised it’s not getting more attention). This lower-level feature is unlikely to come from a third-party open source, and I’m not sure I’d trust it if it did. The open source Puma, an alternative to Passenger, also offers this deploy model. I haven’t tried it in Puma myself beyond some toy testing like the benchmark mentioned above. But I know I absolutely trust Passenger to get it right with no fuss. If you need to maximize performance (or deal with avoiding end-user latency spikes in the presence of some longer-running requests), and deploy under MRI, you should definitely consider Passenger Enterprise just for this multi-process/multi-thread combo feature.