mod_passenger running inside Apache.
Ruby is different from Node and Python in one important way: Passenger only ships one Ruby version per server. Every Ruby app on the box runs that version. You can’t mix 3.2 and 3.3 the way you can mix Node 20 and 22.
Need a specific Ruby version? Open a ticket. We’ll tell you what’s installed and, if it’s an option on your plan, schedule an upgrade. Power-plan accounts have more flexibility.
What’s installed
The Ruby version is set server-wide. To check it from SSH:Set up an app
Click Create Application
On an empty account, you land on a list page with a + Create Application button.
Fill in the form
- Ruby version: pick from the dropdown (usually only one entry).
- Application root: directory under your home, e.g.
myapp. Created if it doesn’t exist. - Application URL: domain dropdown plus optional path. Use
/for the root. - Application startup file: defaults to
config.ru. Rails apps already ship one. - Passenger log file: optional. Useful for catching boot errors.
Manage an app
| Button | What it does |
|---|---|
| Run Bundle Install | Reads Gemfile and installs gems into the per-app gem path. |
| Stop App | Halts Passenger for this app. The URL returns 503. |
| Restart | Equivalent to touch tmp/restart.txt. Reloads the running app. |
| Edit | Reopens the form. Saving overwrites the .htaccess. |
| Destroy | Removes Passenger registration and the per-app gem path. |
The Passenger contract
Standard Rack interface. Aconfig.ru at the application root tells Passenger how to start:
config.ru
config.ru already wired up, no edits needed:
config.ru
rails server. Don’t run rackup. Passenger boots the Rack stack itself.
Reference: where things live
| What | Path |
|---|---|
| Per-app gems | ~/rubyvenv/<app-root>/<version>/... |
| Bundler config | ~/<app-root>/.bundle/ |
| Restart trigger | ~/<app-root>/tmp/restart.txt |
| Passenger config | ~/<app-root>/.htaccess (Selector-managed) |
| Boot log (if configured) | path you set in Passenger log file |
Common issues
App returns 503 on every request
App returns 503 on every request
Passenger couldn’t boot the Rack app. Check the Passenger log file if you set one. Common causes: missing
config.ru, gem version mismatch, bundle install not run yet.Gem 'X' not found at runtime, but `bundle list` shows it
Gem 'X' not found at runtime, but `bundle list` shows it
The runtime is using a different gem path than your shell. Run
bundle install --deployment from inside the app directory, then restart the app.Asset precompilation OOMs on a Rails app
Asset precompilation OOMs on a Rails app
assets:precompile can blow past 1 GB on large apps. Compile assets locally and rsync public/assets/ up, or run with RAILS_ENV=production NODE_OPTIONS=--max-old-space-size=512 bundle exec rake assets:precompile.Boot times out after 60 seconds
Boot times out after 60 seconds
Long Rails initializers can exceed the default Passenger timeout. Bump it in
.htaccess:Gemfile.lock platform mismatch
Gemfile.lock platform mismatch
Bundler complains about a missing platform when installing. Add the linux platform to the lockfile from your dev machine:Commit the updated
Gemfile.lock and redeploy.Recipes
Deploy Rails
Rails app, Bundler, asset precompilation.
Need a hand?
Open a ticket
Best for anything that needs an account check or a config change on our end.
Live chat
Faster for quick questions during business hours.



