# config valid for current version and patch releases of Capistrano lock '~> 3.11.0' set :rvm_type, :auto # Defaults to: :auto set :rvm_ruby_version, '2.6.5' set :god_sidekiq_group, 'push_service' # 当前服务器有app 这个角色。 # gem capistrano-sidekiq 默认值 set :sidekiq_roles, fetch(:sidekiq_role, :app) # 因此会造成执行cap sidekiq:start,但是生产环境因为使用了god,不需要执行这个任务 set :sidekiq_roles, :sidekiq #生产环境没有这个角色。 set :puma_role, 'app' set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production')) set :sidekiq_default_hooks, true set :pty, false set :linked_files, %w[ config/credentials.yml.enc config/master.key config/settings.yml config/puma.rb config/database.yml ] set :linked_dirs, %w[ log tmp/pids tmp/cache tmp/sockets vendor/bundle ] namespace :sidekiq do desc 'restart sidekiq by god' # dev/testing/staging 不用god 监控 task :god_restart do on roles(:sidekiq_god), in: :parallel do execute [ 'source ~/.rvm/scripts/rvm', 'god', "god stop #{fetch(:god_sidekiq_group)}", 'sleep 10', "god remove #{fetch(:god_sidekiq_group)}", "god load #{release_path}/config/sidekiq.god", ].join('; ') end end end namespace :puma do desc 'Create Directories for Puma Pids and Socket' task :make_dirs do on roles(:app) do execute "mkdir #{fetch(:shared_path)}/tmp/sockets -p" execute "mkdir #{fetch(:shared_path)}/tmp/pids -p" end end before :start, :make_dirs end namespace :deploy do desc "Make sure local git is in sync with remote." task :check_revision do on roles(:app) do unless `git rev-parse HEAD` == `git rev-parse origin/#{fetch(:branch)}` puts "WARNING: HEAD is not the same as origin/#{fetch(:branch)}" puts "Run `git push` to sync changes." exit end end end desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do invoke 'sidekiq:god_restart' end end before :starting, :check_revision after :finishing, :compile_assets after :finishing, :restart after :publishing, :restart end