So I had to move an application that I’m developing from a MediaTemple (dv) Dedicated-Virtual to a Ruby on Rails GridContainer running on a MediaTemple (gs) Grid-Service. Most of the tutorials I found that covered installing a Rails app on a GridContainer were somewhat dated. Things that were different than expected include:
- Rails, a few precompiled gems (like RMagick), and a test app are automatically installed for you. Most of the tutorials walk you through installing Rails and the skeleton app from SSH. That’s no longer necessary.
- For Capistrano, you need to set the
syspath option (“System” in the control panel) to
/home/[xxxxx]/containers/rails/[app_path]/current where [xxxxx] is your GridContainer number and [app_path] is where you want your app located. I kept the app path and app name the same.
- You can’t edit application options from the web control panel. You have to do this from a SSH session using
mtr set_option. You may need to do this to change the
syspath or to set the
environment. For example, to set the environment to “staging” you use the following command:
mtr set_option [app_name] environment=staging.
- If you change the
syspath make sure to update the symbolic link to the app’s public folder under your app’s domain, otherwise you’ll get an app not found error. In other words,
~/domains/example.com/html should point to
- When an application fails to start, you get no feedback about the cause. Check log/mongrel.log for details as to why your application fails to start.
- After changing the
syspath, the app may not restart. You may get an
Address already in use - bind(2) (Errno::EADDRINUSE). To resolve this, I ended up having to reboot the container.
- For some reason,
rake gems:install didn’t work. I had to manually install each gem.
I definitely had a lot more control over the installation when I had the application running on the (dv) using Passenger Phusion, especially having the ability to compile software. However, the GridContainer runs a lot faster.