Using Capistrano to deploy your Rails app

1. if you haven’t got Rails installed locally then do it now. 

As of this blog post Rails 4, which you should be using, is pre-release so: 

gem install rails –pre

but drop the –pre when Rails 4 is no longer pre-release.

–pre means install the prerelease rails gem.

http://stackoverflow.com/questions/4041902/what-does-pre-do-in-gem-install-rails-pre

2. create a simple Rails app

rails new myapp

3. upload your Rails app to github

– create a git rep locally if it doesn’t exist

git init; git add .; git commit -am “first commit”

– create a github repo at 

https://github.com/new 

This should tell you what you need to do next however in short:

git remote add origin git@github.com:you/your_repo.git

git push -u origin master

4. capify with

capify .

(and remember to push to git with:

git add .; git commit -am “with capistrano”

git push -u origin master)

Note: as you’re running Rails you should put your Capistrano config information in config/deploy.rb. So, your Capfile should look like this:

load ‘config/deploy’

and your config/deploy.rb file should have all the Capfile details like 

set :git_username, “your_git_username”

set :repository,  “git@github.com:you/your_repo.git”

etc…

5. Use SSH agent forwarding initially

https://help.github.com/articles/managing-deploy-keys

Specifically, make sure you’ve got it set right locally:

https://help.github.com/articles/using-ssh-agent-forwarding

6. Read also this post if you’re having problems with your ssh key:

e.g. 

default_run_options[:pty] = true

helps debug. And add your host to your known_hosts file by doing ssh git@github.com and entering yes (it doesn’t matter that the login won’t succeed).

http://stackoverflow.com/questions/7863070/capistrano-deploy-host-key-verification-failed

and

https://help.github.com/articles/deploying-with-capistrano

7. Then use:

cap deploy:setup 

and

cap deploy:cold

For more details of what deploy:cold does see:

https://github.com/capistrano/capistrano/blob/master/lib/capistrano/recipes/deploy.rb#L200-L203

Notes

Some issues:

I found Capistrano wasn’t creating directories in the releases directory with this option:

set :deploy_via, :remote_cache

http://stackoverflow.com/questions/8246007/capistrano-will-not-create-releases

Also:

To automatically run ‘bundle install’ on the server, add this to your deploy.rb file:

require ‘bundler/capistrano’

http://gembundler.com/v1.3/deploying.html

8. If using a Dreamhost VPS you may need to unset the DreamHost Managed Apache setting in VPS > Configure Server.

http://wiki.dreamhost.com/VPS#httpd.conf

More on deploying Rails including details on Passenger (aka mod_rails), JRuby, Capistrano and Hosting:

http://rubyonrails.org/deploy

Ruby on Rails with Apache and MySQL on Mac OS X Snow Leopard

Snow Leopard is a gnarly old beast.

However, I left my Mountain Lion laptop with someone when visiting and needed to use my old backup Mac running Snow Leopard.

Some hints on how to get stuff (MySQL / Rails) working:

http://geryit.com/blog/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

and

http://hivelogic.com/articles/compiling-mysql-on-snow-leopard

 

ETag – reconfigure or remove

ETags (Entity Tags) are used to check if something (image, script, etc) in the browser’s cache matches the one on the server.

They’re an alternative to using Last-Modified Date.

However, as the default format included inode (for Apache) and server version (for IIS) it caused problems with large scale websites that have multiple servers as these would return a different ETag for exactly the same file just because it was on a different server.

The options are to reconfigure how ETag is set up in Apache / IIS or disable it.

http://developer.yahoo.com/blogs/ydn/high-performance-sites-rule-13-configure-etags-7211.html 

Another issue with including inode information in the header is security. Revealing this information can aid attacks on other network-based services:

http://www.juniper.net/security/auto/vulnerabilities/vuln6939.html

Automatic Post Tagger

Not quite as awesome as an automatic post categoriser but still pretty handy:

http://wordpress.org/extend/plugins/automatic-post-tagger/