Skip to content

Instantly share code, notes, and snippets.

@BlackFoks
Created August 27, 2012 10:06
Show Gist options
  • Save BlackFoks/3487103 to your computer and use it in GitHub Desktop.
Save BlackFoks/3487103 to your computer and use it in GitHub Desktop.
Example of deploy.rb
# ---> RVM details
# добавляем в PATH путь до папки lib rvm
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
# загружаем плагин для поддержки rvm
require "rvm/capistrano"
# указываем какую версию руби и какой гемсет использовать
set :rvm_ruby_string, '1.9.3@blackblog'
# говорим, что rvm установлена для одного пользователя
# если же rvm установлена глобально, то укажите :system
set :rvm_type, :user
# также грузим плагин для поддержки bundler'а
require "bundler/capistrano"
# ---> Main details
# указываем название приложения и роли
set :application, "blackblog"
role :web, "newblog.blackfoks.com"
role :app, "newblog.blackfoks.com"
role :db, "newblog.blackfoks.com", :primary => true
# ---> Server details
# советуют указать для того, чтобы git мог запросить пароль
default_run_options[:pty] = true
# форвардим наши ssh-ключи с локальной машины в инстанс
ssh_options[:forward_agent] = true
# указывам путь, куда проводить deploy
set :deploy_to, "/var/www/my_project"
# если это не указать, то при каждом деплое вся репа будет перекачиваться заново
set :deploy_via, :remote_cache
# указываем имя пользователя на сервере
set :user, "ubuntu"
# указываем путь к ключу, с помощью которого мы заходим на инстанс через ssh
ssh_options[:keys] = [File.join(ENV["HOME"], ".ec2", "ec2-keypair")]
# не использовать sudo
set :use_sudo, false
# ---> Repo details
# используем git
set :scm, :git
# указываем имя пользователя git
set :scm_username, "blackfoks"
# указываем адрес репы
set :repository, "[email protected]:blackfoks/blackblog.git"
# указываем ветку
set :branch, "master"
# включаем поддержку submodul'ей
set :git_enable_submodules, 1
# ---> Runtime dependencies
depend :remote, :gem, "bundler", ">=1.0.21"
# говорим bundler'у устанавливать гемы не в папку с приложением, а глобально
# но, т.к. мы используем rvm, bundler установит гемы в указанный выше гемсет
# можно и без этого, каждый раз устанавливать все гемы долго и тратится много IOps'ов
set :bundle_flags, ""
set :bundle_dir, ""
# ---> Passenger
# указываем environment
set :rails_env, "production"
# указывает порт
set :passenger_port, 80
# какую команду мы будем использовать для запуска passenger'а
set :passenger_cmd, "rvmsudo passenger"
# далее пойдут таски для запуска/остановки passenger'а
# тут все более-менее понятно, только одно замечание:
# мы добавляем `&& sleep 1` после запуска сервера для того, чтобы сервер
# успел запуститься, иначе будет ошибка
namespace :deploy do
task :start, :roles => :app, :except => { :no_release => true } do
# The sleep 1 is to give the server enough time to spawn.
# The session was closing before it spawned, so it never actually spawned
run "cd #{current_path} && #{passenger_cmd} start -p #{passenger_port} --user=ubuntu -e #{rails_env} -d && sleep 1"
end
task :stop, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && #{passenger_cmd} stop -p #{passenger_port}"
end
task :restart, :roles => :app, :except => { :no_release => true } do
run <<-CMD
if [[ -f #{current_path}/tmp/pids/passenger.#{passenger_port}.pid ]];
then
cd #{current_path} && #{passenger_cmd} stop -p #{passenger_port};
fi
CMD
run "cd #{current_path} && #{passenger_cmd} start -p #{passenger_port} --user=ubuntu -e #{rails_env} -d && sleep 1"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment