Deploy Rails Application on Bluehost

Rails on Bluehost
Deploying Rails application on Bluehost for the first time can be quite frustrating. Bluehost provides 24/7 support via phone, ticketing system and live chat, which could seem appealing at first. However people with knowledge of Rails (and quite frankly simple networking/hosting) is a pretty rare find at Bluehost.

Forget phone and live chat support when it comes to Rails – it is not there – period. Ticketing support has a “24 hour come back” policy and most of the time the answer would be “read documentation in bluehost knowledge database”. And it would be ok (not good, but still ok) if bluehost knowledge database had any useful information – it does not.

The problem being is that bluehost, as any other hosting company, has its own proprietary configuration, and it is fine, but without the supporting documentation, bluehost is just an unusable black box. Hence friendly hacking is the only way to go to open it.

Choosing a Rails host today, I would definitely give a try to hostingrails, site5 or asmallorange, but some of my clients are with Bluehost, and since I like solving problems, here is a solution on how to deploy your Rails application to Bluehost.

Firstly, you would need to have an “SSH/Shell Access” enabled on your bluehost account. This requires you to show your “government issued photo id” (driver license / passport / state id / etc..) to Bluehost support. You can do it either through the ticketing system (upload along with the ticket), or while on the phone, you can upload it to one of your directories (e.g “tmp”) via cPanel, so they can look at it immediately, and activate your SSH access.

Once the access is granted/activated, you can ssh to your domain through cPanel Java Applet:

 Security -> 'SSH/Shell Access' -> 'Connect using SSHTerm (requires Java)'

However the applet will only work on Windows box (at least not via Ubuntu / Mac). Therefore it is much easier to just ssh to your domain from a command line:

user@host:$ ssh yourusername@youdomain.com

‘username’ can be found on the left hand side of the main cPanel view. Password is the same as for your bluehost account.

Now it is time to get to work, and deploy your Rails application.

Before hitting the terminal and work via command line, there are two more things that need to be done via cPanel:

1. Upload your application to the bluehost box. From cPanel main view:

 Files -> 'Unlimited FTP' -> 'UnlimitedFTP' button

That loads a simple FTP Java app inside your browser (this one works on Mac / Ubuntu :) ) with a regular left/right pannel, where you can select you Rails application on your local box (panel on the left), and drag and drop it in a directiry (e.g. “tmp”) to the bluehost box (panel on the right).

2. Create a subdomain by going to cPanel main view:

 Domains -> 'Subdomains', enter "dumbapp" (no quotes) to Subdomain' field, and click 'Create' button

There is no real need to create this subdomain (unless you really need a subdomain), but it will come handy later on for testing, and such.

Now let’s hit that command line… SSH to your box (ssh bluehostusername@yourdomain.com)

3. Go to your home directory (just in case), and create a “dumbapp” rails application:

cd ~
mkdir rails
 
cd rails
rails dumpapp

4. Now you are in “~/rails” directory, copy YOUR real application to it:

cp -r path-where-your-rails-app-is-uploaded/your-rails-app-name .

5. Copy dispatch.* files from the “dumbapp” to YOUR real application:

cp dumpapp/public/dispatch* your-rails-app-name/public

6. Goto “~/public_html”, and create a symbolic link to YOUR application’s public directory

cd ~/public_html
 
ln -s ~/rails/your-rails-app-name/public dumbapp

access your Rails application at: “http://dumbapp.yourdomain.com”

6. You, of course, can change the symlink and subdomain names in case you all you need is a subdomained Rails app, however most of the time it is not the case, and most of the time you would want your Rails application to be accessible from a top-level domain: “http://www.yourdomain.com” (no subdomain)

All you need to do for that is to back up your “~/public_html” directory (just in case), and create a “~/public_html” symbolic link:

cd ~
mv public_html public_html_backup
rm -rf public_html/
 
# creating a symbolic link to YOUR application from "~" directory
ln -s ~/rails/your-rails-app-name/public public_html

You may want to have your “map.root” from (config/routes.rb) to be uncommented and pointed to the main controller (but that is already a pure Rails talk :) )

Now get in the blue train and hit the Rails!
Good Luck!

NOTE:
run “rails -v”
make sure you have the same Rails version in “~/rails/your-rails-app-name/config/environment.rb”.

If the version is not the same, update your ‘RAILS_GEM_VERSION’ setting in “config/environment.rb” for the Rails version Bluehost has installed, or comment out ‘RAILS_GEM_VERSION’ to use the latest version installed.

e.g.

vi ~/rails/your-rails-app-name/config/environment.rb
 
# Specifies gem version of Rails to use when vendor/rails is not present
#RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION
RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION

in case your application is built on 2.1.0, and bluehost has 2.2.2 installed (“rails -v” should give the current Rails version installed)

11 comments

  1. Thanks for the guide, but I still haven’t managed to start my RoR application on Bluehost.
    I’ve tried using the RoR Applications menu to create and start a simple test application, as in the official guide, but, when accessing the application URL it keeps on loading forever.
    So I followed all the procedures described on this post, but I get the index of the public directory of my RoR application.
    Could you give me any hint on how to solve this?

  2. @fcampos,

    In case index page (html?) is not what you want your “root” page to be, you have to:

    1. Delete/rename the index.html
    2. Configure “map.root” variable in “config/routes.rb” file to point to your desired home/root controller. e.g. if your root controller name is ‘fcampos’, then you should have:

            map.root :controller => 'fcampos'

    in “config/routes.rb”.

    Good Luck,

    – Toly

  3. Hi, I’m trying to run an app writen in 2.3.2 Rails version. What I did: 1 – Frost my Rails version. 2 – Uploaded. 3 – Copied the dispatch file from a native Bluehost rails app to my public folder. It doen’t work. Any idea? Thanks.

  4. I have two fast questions, how do i find the port no which rails is using?
    how do i find the controller name?

  5. It is also easy to backup and transfer all your websites from one server to another server if you have cPanel installed~*;

  6. anyone having trouble with the speed of railsapps on bluehost? my apps seem to load verry slow!

  7. Thank you for this very detailed guide! And can i comment on anything else? Your comment form is amusing! :P

  8. Oh I’m just not good with codes. It gives me a severe headache. Have your eyes checked guys! http://mickey.ifp.uiuc.edu/wiki/Eye_Exam_FAQs

  9. Does bluehost performs well in the current competition of the online world? I really don’t have any idea about it.

tell me something...
  1. (required)
  2. (valid email - optional)
  3. Captcha
  4. (required)