Ruby on Rails
Note: This document only applies to student groups with virtual hosts who have applied for apphosting. For normal user accounts or for groups without apphosting, you'll want to host with FastCGI instead. See our instructions for that here.
You will want to deploy your application using RVM so that you can easily install and manage dependencies and versions.
Setting up RVM
Create a directory for your app to live in:
mkdir -p ~/myapp cd ~/myapp
Install RVM in your home directory. Note that
rvm
is terrible and will modify your shell config files without asking, but that's probably what you want, since it will make using and managing Ruby/Rails easier.Go find the RVM commands appropriate for your app, and copy the lines straight into your shell to install it. In general this is a bad way to install things, but it only has to be done once. At the time of writing, it looks like this:
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -sSL https://get.rvm.io | bash -s stableGo ahead and run it, and source
rvm
:. ~/.rvm/scripts/rvm
Install whatever version of Ruby you want. (Newer is better).
rvm install ruby-2.4.0 rvm use ruby-2.4.0
Copy your code to
~/myapp/src
or similar, and install any dependencies usingbundle install
(orgem
manually, if you aren't using bundler).This will download and build whatever gems you have in your
Gemfile
. We've tried to install all the headers (dev packages) needed for building common gems, but if building a gem fails due to a missing header, just send us an email so we can add it.
Installing unicorn
We recommend using unicorn to serve your application. After setting up RVM, add
a few lines to your app's Gemfile
(or add a single line if you already have a
:production
group):
group :production do
gem 'unicorn'
end
and run bundle install
to install it, as with any new gems.
Preparing your app to be supervised
Create a file at ~/myapp/run
with content like:
#!/bin/bash -e
. ~/.rvm/scripts/rvm
cd ~/myapp/src
RAILS_ENV=production \
exec ~/.rvm/gems/ruby-2.4.0/bin/unicorn_rails \
-l /srv/apps/$(whoami)/$(whoami).sock
Replace ~/myapp/src
with the path to your app (make sure the path is
correct for the version of Ruby you are using), then make run
executable:
chmod +x ~/myapp/run
Test executing the run
script. You should be able to access your website while
running it (or see any errors in your terminal).
Some things to keep in mind:
- You may need to migrate your database first.
- Make sure you've set secret keys for the app and any gems that need them (e.g. devise).
- Static file serving is off by default in production, but you'll want to turn
it on: set both
config.assets.compile
andconfig.serve_static_assets
(rails 4.1),config.serve_static_files
(rails 4.2), orconfig.public_file_server.enabled
(rails 5) to true inconfig/environments/production.rb
.
Supervise your app with systemd
Cool, your app works. Set up systemd to supervise your app (so that it starts and restarts automatically).
Suggestions/improvements?
If you have a better way to host Rails-based apps on the app server (or a suggestion for how we could improve this documentation), send us an email!