Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.
Updated: August 9, 2026
By Matic BončinaFounder
✓Proofread & verified
Setup Ruby App registers a Ruby application under your cPanel account and hands it to Phusion Passenger, which boots your Rack app and keeps it running. You give it three things: a Ruby version, a directory, and the address you want it served from.
Ruby is included on BONFIRE, BLAZE and INFERMO. SPARK and FLAME don’t come with it, so those plans need an upgrade before any of this works.
You choose the version per application, so two apps in the same account can run different ones. The setup form currently offers:3.2 (preselected), 3.1, 3.0, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2Take the newest one your Gemfile supports. If you need something that isn’t in the list, open a ticket and we’ll tell you whether we can add it.
Don’t run rails server. Don’t run rackup. Passenger boots the Rack stack itself.
Booting your own server inside the app, whether that’s WEBrick through a Rack handler or Puma started by hand, stops Passenger claiming the app. Let config.ru be the entry point and nothing else.
Each app gets its own gem environment under ~/rubyvenv/<app-directory>/<version>/. Your login shell doesn’t use it by default, which is why a gem can be installed and still be missing at runtime.The app row prints the exact line to fix that. Copy it from Command for entering to virtual environment and run it before anything else:
Passenger couldn’t boot the Rack app. Check config.ru exists in the app directory, that your gems are installed, and that the Ruby version on the app row matches what your Gemfile asks for. Restart after each change.
Gem 'X' not found at runtime, but `bundle list` shows it
Your shell and the app are reading different gem paths. Activate the app’s environment first, then reinstall:
Then Restart the app so it picks the gems up.To pin the app to its lockfile, use bundle config set --local deployment true. The older bundle install --deployment flag was deprecated in Bundler 2.1.
Asset precompilation runs out of memory
assets:precompile is the hungriest step in a Rails deploy. Compile locally and copy public/assets/ up, or cap the JavaScript runtime:
Passenger’s default start timeout is 90 seconds, and a long chain of Rails initializers can outrun it. Trim what runs at boot first, since that helps every request afterwards. If the app genuinely needs longer, open a ticket and we’ll look at the timeout for you.
Gemfile.lock platform mismatch
Bundler complains about a missing platform when installing. Add the linux platform to the lockfile from your dev machine: