Created
August 27, 2012 10:06
-
-
Save BlackFoks/3487103 to your computer and use it in GitHub Desktop.
Example of deploy.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ---> 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, "git@bitbucket.org: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