No commit activity in last 3 years
No release in over 3 years
Simple rails deploy makes rails deployment process fun!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

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.