こちらの記事では Rakefile に追記していたが、 lib/tasks に入れた方がまとまりが良いと思ってやってみた覚書。
新しい task を作成
bundle exec rails generate task unicornctl
ファイルを編集
lib/tasks/unicornctl.rb というファイルができるので内容を以下のようにする。
unicornctl.rb
namespace :unicornctl do
desc "Start unicorn for development env."
task start: :environment do
config = File.expand_path('config/unicorn.rb', Rails.root)
sh "bundle exec unicorn_rails -c #{config} -E development -D"
end
desc "Stop unicorn"
task stop: :environment do
unicorn_signal :QUIT
end
desc "Restart unicorn with USR2"
task restart: :environment do
unicorn_signal :USR2
end
desc "Increment number of worker processes"
task increment: :environmen do
unicorn_signal :TTIN
end
desc "Decrement number of worker processes"
task decrement: :environment do
unicorn_signal :TTOU
end
desc "Unicorn pstree (depends on pstree command)"
task pstree: :environment do
sh "pstree '#{unicorn_pid}'"
end
def unicorn_signal signal
Process.kill signal, unicorn_pid
end
def unicorn_pid
begin
File.read(File.expand_path('tmp/pids/unicorn.pid', Rails.root)).to_i
rescue Errno::ENOENT
raise "Unicorn doesn't seem to be running"
end
end
end
タスクの確認
編集が完了したらタスクを確認する。
$ ./bin/bundle exec rake -vT unicornctl
rake unicornctl:decrement # Decrement number of worker processes
rake unicornctl:increment # Increment number of worker processes
rake unicornctl:pstree # Unicorn pstree (depends on pstree command)
rake unicornctl:restart # Restart unicorn with USR2
rake unicornctl:start # Start unicorn for development env
rake unicornctl:stop # Stop unicorn
起動・停止
起動・停止はこちらの記事と同じ。
bundle exec rake unicornctl:start # 起動
bundle exec rake unicornctl:stop # 停止