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

Leave a Reply

Your email address will not be published. Required fields are marked *