Home / Guides / Deploy Ruby apps on Shared Web Hosting

Deploy Ruby apps on Shared Web Hosting

TL;DR: Most shared hosting plans can’t run a real Ruby on Rails app. There’s no bundler, no rake tasks, and no sane way to deploy without SSH access. FireVM’s shared hosting changes that, no terminal, no command line.

In this guide, we’ll deploy Redmine, a popular open-source Ruby on Rails project management app, entirely through the browser using the FireVM control panel.

Why Ruby is usually a pain on shared hosting

Most shared hosting plans weren’t built with Ruby on Rails in mind. There’s no bundler exposed in the panel, no clean way to run rake tasks, and the moment something breaks, you’re told to drop into SSH, something a lot of shared hosting plans don’t even give you.

Here’s what that typically looks like, compared to running Ruby on FireVM.

On most shared hosts (what usually goes wrong)

  • No Ruby runtime exposed through the panel at all, or bolted on as a fragile CGI setup
  • No Bundler support, so gems with native extensions fail with header file errors
  • Rake tasks mean dropping into SSH, if you even have shell access
  • Git deploys mean manually pulling and rebuilding over SSH every time
  • Passenger/CageFS quirks silently break app spawning with no useful error logs
  • Database config files (database.yml) edited by hand, easy to get wrong
  • Ruby support, where it exists at all, usually means paying several times the cost of shared hosting for a VPS

On FireVM shared hosting (everything else, taken care of)

  • Ruby runs as a real, persistent process, with gems and native extensions installing properly
  • Bundler and rake tasks run directly from the panel, no shell needed
  • Git-based deploys, including branch switching, handled through the UI
  • Application startup, restarts, and environment variables managed from a dashboard
  • SSH access is included too, if you’d rather work from the terminal
  • All of this runs on the same shared hosting plan, no VPS required

Here’s a full walkthrough deploying Redmine, a real Ruby on Rails app, entirely in the browser. If you’d rather work from an SSH terminal instead of the Web UI, that’s covered too, right after the UI-based walkthrough.

Installing Redmine, step by step

Step 1: Create a subdomain and enable SSL

In the FireVM control panel, go to Websites & Domains → Add Subdomain. Give it a name, we’re using rails-demo. Then enable SSL through Let’s Encrypt. This secures your site with HTTPS before we install anything.

Step 2: Enable Ruby

From the subdomain’s Get Started tab, click Ruby, then Enable Ruby. Confirm the Ruby version shown matches what Redmine needs, more on version compatibility below.

Step 3: Deploy Redmine via Git

From Get Started, click Deploy using Git → Add Repository.

Repository URL: https://github.com/redmine/redmine.git
Repository name: redmine.git
Deployment mode: Automatic
Server path: /rails-demo.inspirevilla.com

Leave the Username and Password fields blank. If your browser autofills these and causes a “could not read Username” error, use an incognito window instead.

Click Create. The clone can take up to about 10 minutes.

If it looks stuck, refresh the page rather than retrying, the clone is likely still running in the background.

On the repository’s management page, switch the Branch dropdown to 6.1-stable, then click Deploy now.

Step 4: Set the document root

Go to Hosting & DNS → Hosting Settings. The Document root field may show a stale or incorrect default. Manually set it to rails-demo.inspirevilla.com/public and save. Redmine’s public assets live in that folder, and the app won’t load correctly if the document root points anywhere else.

Step 5: Configure the database

In File Manager, go to config/ and create a new file called database.yml:

production:
  adapter: sqlite3
  database: db/redmine.sqlite3

Step 6: Install gems and run setup tasks

From the Ruby panel, click Bundle install. This installs all the gems Redmine needs, including ones with native extensions.

Then, from the Ruby panel’s rake task runner, run each of these one at a time:

generate_secret_token

This task shows no visible output, it just spins and returns to the panel. That’s normal, not a failure. Confirm it worked by checking that config/initializers/secret_token.rb was created in File Manager.

db:migrate
REDMINE_LANG=en redmine:load_default_data

Both of these show live output normally as they run.

Step 7: Verify

Visit your subdomain, for example http://rails-demo.inspirevilla.com. The Redmine home page should load. Log in with admin / admin, and set a new password when prompted.

Known gotchas

A few things worth knowing before you hit them yourself.

  • Removing a subdomain doesn’t delete its files. If you remove a subdomain and recreate it with the same name, check File Manager afterward and delete any leftover folder from the old deployment. Old files and configs otherwise persist and conflict with the fresh deploy.
  • The document root field can default to a stale or wrong value, not necessarily the correct subdomain path. Always check and set it explicitly rather than assuming it’s correct, as covered in Step 4.
  • Check Ruby version compatibility against Redmine’s supported range before picking a branch. Redmine 5.1-stable needs Ruby 3.2 or earlier; 6.1-stable needs Ruby 3.2 through 3.4.
  • Domain naming convention: this guide uses rails-demo rather than ruby-demo, matching how developers typically name these subdomains, even though the panel’s button is labeled “Ruby.”

Prefer the terminal? Here’s the SSH version

Everything above runs through FireVM’s control panel UI, but Developer and above plans include full SSH access too. If you’d rather work from the terminal, here’s the same install as a command sequence.

# 1. Navigate to your subdomain's document root
cd ~/rails-demo.inspirevilla.com

# 2. Clone Redmine directly into this folder
git clone https://github.com/redmine/redmine.git .
git checkout 6.1-stable

# 3. Create the database config
nano config/database.yml
# add:
# production:
#   adapter: sqlite3
#   database: db/redmine.sqlite3

# 4. Install gems
bundle install

# 5. Generate the secret token
RAILS_ENV=production bin/rails generate_secret_token

# 6. Run migrations
RAILS_ENV=production bin/rails db:migrate

# 7. Load default data
RAILS_ENV=production REDMINE_LANG=en bin/rails redmine:load_default_data

# 8. Tell Passenger to reload the app
mkdir -p tmp
touch tmp/restart.txt

Double-check your document root path and Ruby version before running this, both are specific to your setup.

What’s next

FireVM’s Developer plan runs Ruby apps like this. Anything below that won’t give you Bundler, Git deploys, or rake task support for Ruby apps.

If you’re running client sites rather than just your own, the Agency plan is the better fit. It gives each client their own isolated account with a separate login, so you can hand off access without exposing anything else on your hosting.

If your app genuinely needs more than shared web hosting can offer, heavier traffic, custom server-level configuration, or full root access, FireVM’s VPS hosting is there too. And if you ever outgrow VPS as well, FireVM’s dedicated servers are there for when you need a machine entirely to yourself.

Tagged:

Leave a Reply

Your email address will not be published. Required fields are marked *