Introduction
Trying to get Rails 3.2 along with ruby 1.9.3 running on a shared Dreamhost server?
Need to get it running against your Dreamhost MySQL database?
Worry no more. I have gone through the steps to do so.
Note: this tutorial assumes that you have knowledge of the following:
- You’re using a shared Dreamhost server (if you’re using VPS or dedicated, you don’t need this document because you have full control).
- How to use the command line
- You are not using csh or tcsh
- How to configure the shell you’re running (the .*rc file)
- Rails 3.2 (this is not a Rails tutorial!)
- MySQL and getting it going on Dreamhost (this is not a MySQL or a MySQL on Dreamhost tutorial!)
Step 1: Install RVM
Here’s more information about rvm, but it’s basically a package manager for ruby. With it, and some special shell/CGI magic, you too can run ruby 1.9.2 (or even ruby 1.9.3) on a server that’s installed ruby 1.8.x for some reason.
Run the following command to install RVM:
curl -L https://get.rvm.io | bash -s stable --rails
Step 2: Add rvm to Your Path
Add the following line to your .bashrc if you’re using bash,
or to your .zshrc if you’re using zsh, etc etc etc.
export PATH=$HOME/.rvm/bin:$PATH # Add RVM to PATH for scripting source ~/.rvm/scripts/rvm
Step 3: Install Ruby 1.9.3 as Your Default Ruby
Run the following commands:
rvm install ruby-1.9.3 rvm use default ruby-1.9.3
Now you can use gem like any sane person (don’t use sudo gem;
you want these gems installed locally).
Step 4: Install Rails 3.2 and Assorted Necessary Gems
Run the following commands:
gem install rails gem install mysql2 gem install fcgi gem install therubyracer
Step 5: Generate Your Rails App
Do it the usual way.
Step 6: Do Not Use Passenger
You’ll need to use FastCGI on a shared Dreamhost server.
Go to “Manage Domains” on your Dreamhost panel and choose “Edit” next to your domain.
Update the following:
- Web directory should point to YourAppName/public (replacing YourAppName as appropriate).
- Make sure the Passenger option is unchecked.
Hit Save.
Wait for the little clock next to your domain on the Manage Domains page to expire.
Step 7: Update Your Gemfile
Your Gemfile will need a few changes now.
Under the line gem 'sqlite3' add the following:
gem 'mysql2' gem 'fcgi'
Under the line group :assets do uncomment the following:
gem 'therubyracer', :platforms => :ruby
Step 8: Create dispatch.fcgi in public/
Please replace the following as appropriate.
- USER (x2) = your user name
- RUBY (x4) = full version of your ruby, like ruby-1.9.3-p194
- APPNAME (x1) = app name as found in config/application.rb
#!/home/USER/.rvm/rubies/RUBY/bin/ruby ENV['RAILS_ENV'] ||= 'production' ENV['HOME'] ||= '/home/USER' ENV['GEM_HOME'] = File.expand_path('~/.rvm/gems/RUBY') ENV['GEM_PATH'] = File.expand_path('~/.rvm/gems/RUBY') + ":" + File.expand_path('~/.rvm/gems/RUBY@global') require 'fcgi' require File.join(File.dirname(__FILE__), '../config/environment') class Rack::PathInfoRewriter def initialize(app) @app = app end def call(env) env.delete('SCRIPT_NAME') parts = env['REQUEST_URI'].split('?') env['PATH_INFO'] = parts[0] env['QUERY_STRING'] = parts[1].to_s @app.call(env) end end Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(APPNAME::Application)
DON’T FORGET TO MAKE IT EXECUTABLE: chmod 755 dispatch.fcgi
Step 9: Add a Welcome Page
You need to do this because FastCGI acts differently from Passenger when it comes
to certain paths, like / .
Run:
rails generate controller Welcome index
Then edit config/routes.rb and add the following route:
root :to => 'welcome#index'
Step 10: Edit database.yml
Under production: use the following lines, replacing DATABASE, MYSQLHOST, USER, and PASSWORD as appropriate:
adapter: mysql2 encoding: utf8 database: DATABASE username: USER password: PASSWORD host: MYSQLHOST
Step 11: Precompile Your Assets
If you’re getting core dumps when visiting your site, this is why.
Run:
rake assets:precompile
Step 12: Visit Your Site
It may take a while as Rails loads your site for the first time.
Now you should see the following:
<strong>Welcome#index</strong> Find me in app/views/welcome/index.html.erb
And now you are done.
I followed this guide, but I can’t seem to get it to work. Ruby 1.9 gives me errors about having to be reinstalled, because I don’t have libyaml installed.
I had to add a .htaccess file in the public director with something like this in it:
AddHandler fastcgi-script fcgi
RewriteEngine On
RewriteBase /
RewriteCond %{request_uri} !^/favicon.ico
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
I also had to add above to .htaccess but thanks Arachne & Steven for this guide.
This is actually awesome, a lot of thanks, made my day. Just have to add the .htaccess file and works just like a charm. I will try to make passenger works with this ;)
If you get that working you will be my hero.
Thank you very much!!
I followed this guide to the letter, and used the aforementioned .htaccess file, but I’m getting 500 errors. :( I know it’s gotta be something with the .htaccess file…I literally copied and pasted the contents. Before I had the htaccess file, I was only getting directory index errors. The dispatch.fcgi does not error out. I also tried the .htaccess file on Dreamhost’s wiki, but nothing. :(
I tried a third time just because I’m losing my patience….and it finally worked!!
I’m having the same issue. Any idea what you changed in the .htaccess that made it work?
I can’t even install ruby-1.9.3…
ruby-1.9.3-p392 – #compiling…………………………………………………………….
Error running ‘make -j8’,
please read /home/thejase/.rvm/log/ruby-1.9.3-p392/make.log
There has been an error while running make. Halting the installation.
[miram]$
I had this error but overcame it by installing an old version of RVM. I also asked the question on stackoverflow here: http://stackoverflow.com/questions/15798461/how-do-i-use-rvm-to-install-ruby-on-a-dreamhost-shared-server
When I tried the rvm install it failed because : “No binary rubies available for: debian/6.0.6/ruby-1.9.3….”
Evidently the Dreamhost server got a patch.. the 6.0.4 binary seems to work fine I just had to run
rvm mount -r https://rvm.io/binaries/debian/6.0.4/x86_64/ruby-1.9.3-p392.tar.bz2 –verify-downloads 1
instead of rvm install.
For me, I was not able to install ruby 1.9.3 as it was prompting me for a sudo password (which I don’t have). The curl command for RVM is currently installing 1.19.0. I was able to make this work only by installing a later version (1.13.0) using this command.
\curl -L https://get.rvm.io | bash -s — –version 1.13.0
For me, I was not able to run the “rvm install 1.9.3” command as it was prompting me for a sudo password (which I don’t have). As of this writing, the curl command for RVM is installing 1.19.0. I was able to make this work only by installing a later version (1.13.0) using this command.
\curl -L https://get.rvm.io | bash -s — –version 1.13.0
After that, everything worked beautifully
Using 1.19 or 1.13 my shared dreamhost is saying I’m missing the following libs: libreadline6-dev, libyaml-dev, automake, libtool, libffi-dev
How do you get around this?
Thanks for this, it’s awesome!
For those wondering why this isn’t working more recently, the problem is the new autolibs stuff in rvm. But you don’t need to revert to an earlier version or hack anything, you can just turn it off! When installing, use the following:
\curl -L https://get.rvm.io | bash -s — –autolibs=read-fail
Then, to install rubies, you need to disable autolibs with:
rvm autolibs disable
That should see you through.
For those having problems, the newest version of rvm comes with something called “autolibs”, which tries to install packages and needs to be turned off. When installing rvm, use:
\curl -L https://get.rvm.io | bash -s — –autolibs=read-fail
And then disable autolibs for ruby installs with:
rvm autolibs disable