Created
March 22, 2014 14:39
-
-
Save arkan/9708190 to your computer and use it in GitHub Desktop.
Capistrano 3 with Sidekiq + Rbenv + Unicorn
This file contains hidden or 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
| # Load DSL and Setup Up Stages | |
| require 'capistrano/setup' | |
| # Includes default deployment tasks | |
| require 'capistrano/deploy' | |
| # Includes tasks from other gems included in your Gemfile | |
| # | |
| # For documentation on these, see for example: | |
| # | |
| # https://github.com/capistrano/rvm | |
| # https://github.com/capistrano/rbenv | |
| # https://github.com/capistrano/chruby | |
| # https://github.com/capistrano/bundler | |
| # https://github.com/capistrano/rails | |
| # | |
| # require 'capistrano/rvm' | |
| # require 'capistrano/chruby' | |
| require 'capistrano/rbenv' | |
| require 'capistrano/bundler' | |
| require 'capistrano/rails/assets' | |
| require 'capistrano/rails/migrations' | |
| require 'sidekiq/capistrano' | |
| # require 'capistrano/unicorn' | |
| # Loads custom tasks from `lib/capistrano/tasks' if you have any defined. | |
| Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r } |
This file contains hidden or 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
| # Simple Role Syntax | |
| # ================== | |
| # Supports bulk-adding hosts to roles, the primary | |
| # server in each group is considered to be the first | |
| # unless any hosts have the primary property set. | |
| # Don't declare `role :all`, it's a meta role | |
| role :app, %w{deploy@SERVER_IP} | |
| role :web, %w{deploy@SERVER_IP} | |
| role :db, %w{deploy@SERVER_IP} | |
| # Extended Server Syntax | |
| # ====================== | |
| # This can be used to drop a more detailed server | |
| # definition into the server list. The second argument | |
| # something that quacks like a hash can be used to set | |
| # extended properties on the server. | |
| server 'SERVER_IP', user: 'deploy', roles: %w{web app db} | |
| # you can set custom ssh options | |
| # it's possible to pass any option but you need to keep in mind that net/ssh understand limited list of options | |
| # you can see them in [net/ssh documentation](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start) | |
| # set it globally | |
| set :ssh_options, { | |
| # keys: %w(/home/rlisowski/.ssh/id_rsa), | |
| forward_agent: true, | |
| # auth_methods: %w(password) | |
| } | |
| # and/or per server | |
| # server 'example.com', | |
| # user: 'user_name', | |
| # roles: %w{web app}, | |
| # ssh_options: { | |
| # user: 'user_name', # overrides user setting above | |
| # keys: %w(/home/user_name/.ssh/id_rsa), | |
| # forward_agent: false, | |
| # auth_methods: %w(publickey password) | |
| # # password: 'please use keys' | |
| # } | |
| # setting per server overrides global ssh_options |
This file contains hidden or 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
| # config valid only for Capistrano 3.1 | |
| lock '3.1.0' | |
| set :application, 'APPLICATION_NAME' | |
| set :repo_url, 'git@github.com:YOU/YOUR_REPO.git' | |
| # Default branch is :master | |
| set :branch, "BRANCH_TO_DEPLOY" | |
| # ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp } | |
| # Default deploy_to directory is /var/www/my_app | |
| set :deploy_to, '/var/www/YOUR_WEBSITE' | |
| # Default value for :scm is :git | |
| set :scm, :git | |
| # Default value for :format is :pretty | |
| set :format, :pretty | |
| # Default value for :log_level is :debug | |
| set :log_level, :debug | |
| # Default value for :pty is false | |
| # set :pty, true | |
| # Default value for :linked_files is [] | |
| # set :linked_files, %w{config/database.yml} | |
| # Default value for linked_dirs is [] | |
| # set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} | |
| # Default value for default_env is {} | |
| # set :default_env, { path: "/opt/ruby/bin:$PATH" } | |
| # Default value for keep_releases is 5 | |
| # set :keep_releases, 5 | |
| #RBENV | |
| set :rbenv_type, :user # or :system, depends on your rbenv setup | |
| set :rbenv_ruby, '2.1.0' | |
| set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec" | |
| set :rbenv_map_bins, %w{rake gem bundle ruby rails} | |
| set :rbenv_roles, :all # default value | |
| #Sidekiq | |
| SSHKit.config.command_map[:sidekiq] = "bundle exec sidekiq" | |
| SSHKit.config.command_map[:sidekiqctl] = "bundle exec sidekiqctl" | |
| namespace :deploy do | |
| set :unicorn_config, "#{current_path}/config/unicorn.rb" | |
| set :unicorn_pid, "/tmp/web_server.pid" | |
| desc 'Restart application' | |
| task :restart do | |
| on roles(:app), in: :sequence, wait: 5 do | |
| # Your restart mechanism here, for example: | |
| # execute :touch, release_path.join('tmp/restart.txt') | |
| execute "if [ -f #{fetch(:unicorn_pid)} ]; then kill -USR2 `cat #{fetch(:unicorn_pid)}`; fi" | |
| end | |
| end | |
| desc 'stop application' | |
| task :stop do | |
| on roles(:app), in: :sequence, wait: 5 do | |
| execute "if [ -f #{fetch(:unicorn_pid)} ]; then kill -QUIT `cat #{fetch(:unicorn_pid)}`; fi" | |
| end | |
| end | |
| desc 'start application' | |
| task :start do | |
| on roles(:app), in: :sequence, wait: 5 do | |
| within "#{current_path}" do | |
| with rails_env: "production", bundle_gemfile: fetch(:bundle_gemfile) do | |
| execute :bundle, :exec, "unicorn_rails -c #{fetch(:unicorn_config)} -D" | |
| end | |
| end | |
| end | |
| end | |
| after :publishing, :restart | |
| # after :restart, :clear_cache do | |
| # on roles(:web), in: :groups, limit: 3, wait: 10 do | |
| # # Here we can do anything such as: | |
| # # within release_path do | |
| # # execute :rake, 'cache:clear' | |
| # # end | |
| # end | |
| # end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
require 'sidekiq/capistrano' ?
What gem is this ?