Skip to content
Simple rails deploy is based on capistrano and integrates it into rails application deployment
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
.gitignore
CHANGELOG
LICENSE.txt
README.md
Rakefile
simple-rails-deploy.gemspec

README.md

Simple rails deploy

This gem is made to get everything I need for deploy in one place:

  • capistrano configuration
  • unicorn configuration and startup rake task
  • nginx configuration
  • all stuff and magic to use this all together

Assumptions

  • Project uses ruby 1.9.3 for deployment.
  • Project uses asset pipeline for asset packing.
  • Project uses bundler to handle dependencies.
  • Project uses git.
  • Each project has its own user.

What does it provide

Configless unicorn control and configuration: tasks unicorn:start, unicorn:restart, unicorn:stop. Small common capistrano recipes.

Limitations

Unicorn can be less flexibly configured

Step by step instruction

Server-side: (as root)

# Server initial setup
apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
#Use other package if not using PostgreSQL
apt-get install postgresql libpq-dev

# Creating new ssh user
adduser <project-name>
cd ~<project-name>
mkdir .ssh
nano .ssh/authorized_keys
#(paste your public ssh key in editor)
chmod -R 700 .ssh
chown -R <project-name>:<project-name> .ssh

# Database credentials
su postgres
createuser <project-name>
# Allow only database creation, not superuser

And you should add nginx config:

server {
  server_name <domain to use>;

  root   /home/<projectname>/app/current/public;
  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    # If you don't find the filename in the static files
    # Then request it from the unicorn server
    proxy_pass http://unix:/home/<projectname>/app/shared/tmp/unicorn.sock:;
  }
}

That's all for root. Everything else will be done without superuser privileges.

In application code folder: Run 'capify .' command. Replace config/deploy.rb:

require 'simple-rails-deploy/common'

#Use rvm with ruby 1.9.3 for deployment
load 'deploy/rvm'
#Use unicorn as web server
load 'deploy/unicorn'
#Uncomment if you want to add 'deny all' robots.txt on deploy
#load 'deploy/robots-deny-all'

#multistaging
require "capistrano/ext/multistage"
set :stages, %w(demo)
set :default_stage, "demo"
set :keep_releases, 5

set :application, "<application name>"
set :repository,  "<repo name>"

create file config/deploy/[stage-name].rb with contents:

# Path to deploy folder is calculated based on appication name:
# set :deploy_to, "/home/#{application}/app/"
# Username is the same as application name:
# set :user, application

#set rails environment here
set :rails_env, "production"

#set git branch here
set :branch, "master"

#set server address here
set :domain, "<server-hostname>" # Required for ssh deploy

#Server roles
role :web, domain
role :app, domain
role :db,  domain, :primary => true

And run:

#Remove deploy:create_database if you do not need to setup database and/or create database.yml file
#Set up rvm, install ruby, initial project deploy
cap <stagename> rvm:install_rvm rvm:install_ruby deploy:create_database deploy:setup deploy:create_database_yml deploy:cold deploy:migrate deploy

Adding custom config files

Put them into '/home/youruser/app/shared/' folder and add to delpoy.rb:

set :normal_symlinks, %w(
    config/database.yml
    tmp
    config/first_custom_config.yml
    config/second_custom_config.yml
)

License

Copyright 2012, Alexander Rozumiy. Distributed under the MIT license.

Thanks to @Slotos for help with initial configuration files.

Something went wrong with that request. Please try again.