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.
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 stable
Go 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
using bundle install
(or gem
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.
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.
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:
config.assets.compile
and config.serve_static_assets
(rails 4.1), config.serve_static_files
(rails 4.2), or
config.public_file_server.enabled
(rails 5) to true in
config/environments/production.rb
.Cool, your app works. Set up systemd to supervise your app (so that it starts and restarts automatically).
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!