とーますメモ

Ruby on Rails / Goなどの学習メモ

【Sidekiq】Capistranoで独自タスクを書いてみた。

capistrano-sidekiqが微妙だったので、
自分でタスクを書いた。

append :linked_files, "config/database.yml", "config/secrets.yml", "config/sidekiq.yml"

set :sidekiq_pid_path, -> { File.join(shared_path, 'tmp', 'pids', 'sidekiq.pid') }
set :sidekiq_config, ->   { File.join(shared_path, 'config', 'sidekiq.yml') }

namespace :sidekiq do
  task :kill do
    on roles(:app) do
      execute "kill -TERM `cat #{fetch :sidekiq_pid_path}`; true"
    end
  end

  task :restart do
    on roles(:app) do
      invoke 'sidekiq:kill'
      within current_path do
        execute "su - USER_NAME -c 'cd /var/www/shopify_data_manager/current && $HOME/.rbenv/bin/rbenv exec bundle exec sidekiq -C #{fetch :sidekiq_config} --daemon'"
      end
    end
  end
  after  'deploy:finishing', 'sidekiq:restart'
end

namespace :deploy do

  desc 'upload linked_files'
  task :upload do
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
      upload!('config/sidekiq.yml',"#{shared_path}/config/sidekiq.yml")
    end
  end

  ...

end


最初は、Sidekiqを起動するコマンドを以下のように書いていた。

execute :bundle, :exec, "sidekiq -e development -C #{fetch :sidekiq_config}"

しかし、これだと何故か動かなくて、
いろいろ調べているうちに、以下のページからヒントを貰い、

monitoring - monitでsidekiqの停止を感知できるが、sidekiqを自動起動できない - スタック・オーバーフロー

ユーザを変更してみたら、動作した。


[参考]
Capistranoでunicornとsidekiqをシンプルにrestartする - Qiita
capistrano-sidekiqを使うのをやめる - Qiita