Hello Tyson!
Welcome to DreamHost! (Heh.) DreamHost can be a challenge to get a
handle on. Here’s a few quick tips you really need to know.
Get Radiant running under dispatch.cgi. By doing this, you will know you
have Radiant working. When you do this, you will get more verbose errors
in the log as well, which you will find is a godsend.
Shell will become your friend. Make sure you know how to shell into
DreamHost
Make sure you have your rubygem install up and running. You will need
this. When you do get it up, make sure your .bash_profile has the
following in it based on where you installed your gems (I did it into
.gems so it’s not in my directory list all the time): (Here’s a link to
help you set it up http://wiki.dreamhost.com/RubyGems )
export PATH=“$HOME/bin:$PATH”
export RUBYLIB=“$HOME/local/lib/site_ruby/1.8”
export GEM_HOME=“$HOME/.gems”
export GEM_PATH=“/usr/lib/ruby/gems/1.8:$GEM_HOME”
export PATH=“$HOME/.gems/bin:$PATH”
This ensures that when you run ‘gem’ that it uses your local version,
and that --MOST-- (Not all, keep reading) applications uses your gems
first.
gem install radiant – That will get you the newest version, and ensure
your rubygem install is working under shell.
Now, a big issue with how they have apache set up is that it does not
regard your .bash_profile, .gemrc or otherwise when under FastCGI. This
being said, you have to make Apache recognize your Radiant gem install
Head into http://panel.dreamhost.com/ and go to Domains->Manage Domains.
Make sure you have your domain set up with the following settings:
Extra Web Security: Yes
FastCGI Support: Yes
Specify web directory: domain.com/public (Change domain.com to whatever
directory your web host will be in. Can’t)
While you’re in the panel, make sure you have a MySQL database up and
know the username/password.
Head into the shell and go into the domain.com/ folder (Or whatever you
called it - Don’t go into the public folder, if it is there.) Run the
following command:
radiant ./ --ruby=/usr/bin/ruby --database=mysql
This will generate the directories and get them up and running for you.
Radiant won’t be ready yet though. From here, head into config/ and edit
database.yml (pico works fine) You want to change the database,
username, password, AND add host: if it is not there, on both
development and production. In the host portion, you need to put
mysql.domain.com (It will be the first domain name you put with
dreamhost unless you’ve set up otherwise.) – They do not host the MySQL
database on the same system as the apache (Heck, your files aren’t even
technically on that server, they have those on a remote fileserver. All
your server is, is a process center for running Apache.)
Close that file, and edit environment.rb. Add these three lines to the
top of the file:
ENV[‘RADIANT_ROOT’] = ‘/home/myhome/.gems/gems/radiant-0.6.1’
ENV[‘GEM_HOME’] = ‘/home/myhome/.gems’
ENV[‘GEM_PATH’] = ‘/home/myhome/.gems:/usr/lib/ruby/gems/1.8’
myhome will be the same as your username you use to log into shell. If
you didn’t install rubygem to .gems, make sure you change that too.
Go down a few lines from there, and change the ENV[‘RAILS_ENV’] line to
ENV[‘RAILS_ENV’] ||= ‘production’
While development is fine for most other hosts, development seems to get
canned very often by DreamHost, so you might as well deal with the
little hassles linked to using ‘production’ - It’s not as bad to use on
dreamhost anyways; To restart apache in this instance, you would simply
touch dispatch.fcgi to restart Radiant(Apache) anyways.
Now, you may or may not have to tweak some of the rest of the
environment file. I can’t remember if you do.
Close and save that, and then head back to your main directory and head
into public folder. Add the following lines at the very bottom of the
file to help minimize 500 errors caused by DreamHost canning your
process mid-serving. There is a plug-in that apparently works really
well; I use it, but it hangs the whole thing up more than it saves from
500s.
class RailsFCGIHandler
private
def frao_handler(signal)
dispatcher_log :info, “asked to terminate immediately”
dispatcher_log :info, “frao handler working its magic!”
restart_handler(signal)
end
alias_method :exit_now_handler, :frao_handler
end
Also, make sure that the path to ruby got put in properly at the top:
#!/usr/bin/ruby
Make sure in your .htaccess in that folder that you have AddHandler
fastcgi-script .fcgi uncommented and that you changed the final
RewriteRule to
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
Now, one major thing you will need to do to help minimize DreamHost’s
automated process canner (Set at 200MB memory usage or appear ‘runaway’,
which is pretty loose term by them.) – You will need to make sure you
have any files hosted in your /public folder be under a RewriteCond
similar to this:
RewriteCond %{REQUEST_URI} ^/javasript/(.*)$
You need to do this for all your images, javascript files, favicon.ico,
and so forth. Any file that would be directly accessed by HTML, you need
it away from the Ruby on Rails dispatcher. If you don’t do that, you
will be having your memory constantly running up to and over 200MB,
causing dreamhost to can your process with no warning, forcing a lengthy
‘reboot’ of dispatch.fcgi, during which you will get an army of ‘500’
errors. An alternate route that I have chosen is by having a second host
to be home to my website files such as my images and such. This means
you only need to make enough RewriteCond’s to handle what is in place:
This is my current list of Rewrites for this purpose:
RewriteCond %{REQUEST_URI} ^/stats/(.)$ [OR]
RewriteCond %{REQUEST_URI} ^/javasript/(.)$
RewriteCond %{REQUEST_URI} ^/favicon.ico$
RewriteCond %{REQUEST_URI} ^/images/(.)$
RewriteCond %{REQUEST_URI} ^/stylesheets/(.)$
RewriteCond %{REQUEST_URI} ^/robots.txt$
You want to put this below RewriteBase /
DreamHost states they are Ruby on Rails-friendly, but their setup
doesn’t lend well to this. They have set up --5-- dynamic dispatch.fcgi
that will launch on your site, causing a plethora of issues; 200MB x 5
→ 1GB RAM. They will can everything of yours when it hits a certain
point, and if you have all 5 of your dispatchers flooded, rather than
your site going down temporarily until requests slow down (Like what
would happen with 2 static dispatchers.) Dreamhost will happily
continuously can your processes, INCLUDING shell processes until it is
happy you are no longer being a hog. This has happened to me twice. Not
pleasant. You’re essentially down until you have NO web traffic by this
point; Once took me over 5 hours and turning off the hosting temporarily
in the Panel. These ‘bursts’ in memory usage would be caused by Ruby on
Rails getting every single request for a file, even those that it
doesn’t control, and it having to handle them. If you put the
RewriteCond’s in place, it will simply allow Apache to handle them
itself rather than going through the dispatcher, leaving the dispatcher
to handle the issue itself.
Now, another thing to keep in mind; I don’t know if it is a Radiant or
DreamHost issue yet, but I’m getting ~2000 hits a day, and sometime
during that day, my cache gets bungled somehow and you’ll get an Apache
error, stating something to the effect that something happened. When
this happens, you need to go into http://www.domain.com/admin/pages/ and
click the ‘Clear Caches’ to fix this issue up. Sometimes you may need to
go into the shell and do a ‘touch dispatch.fcgi’ in the
domain.com/public/ folder to reset Apache. It is a nuisance for sure,
but it’s far less often than the 500 errors that you’ll get if you don’t
manage your .htaccess well.
Another tip: Unless you are hung badly, avoid using killall -9
dispatch.fcgi: Apache is set on a very long timer (5minutes+) for
timeout on the dispatchers, and you will be pulling your hair out trying
to figure out what Apache is not bringing the dispatchers back up.
Always use touch dispatch.fcgi unless that is not working; Touch will
work in most cases unless you have a major issue.
I hope I haven’t forgotten anything. This should get you up and running.
As mentioned before, I recommend running off of .cgi instead of .fcgi to
make sure it isn’t Radiant being a pain. Check the logs; They will tell
you a lot when you’re under .cgi. When you have all the above in place
(Some of above specifically pertains to dispatch.fcgi BTW.) give the
.fcgi a try.
I hope this helps. I wrote out the entire procedure I did for you and
others having issues. I know you likely know a good portion of this
already; A lot of these steps I had to come up with on my own.
Lemmie know if you need more help!
Andrew
BladedThoth.com