UnicornにUSR2シグナル送って、再起動する時、エラーが出る

More than 3 years have passed since last update.


サーバーの環境

rbenv 0.4.0-129-g7e0e85b

ruby 2.1.0p0

Rails 4.1.6

capistrano 3.1.0


どんなバグでしょうか

デプロイの時に以下のコマンドで、unicornにUSR2シグナルを送って、再起動しています。

kill -USR2 `cat #{fetch :unicorn_pid_file}`

unicornのログを見ると、時々unicornを見つからなくて再起動できませんでした。

I, [2015-05-20T09:45:31.070833 #11781]  INFO -- : executing ["/var/www/pinpg_prot/releases/20150515054058/vendor/bundle/ruby/2.1.0/bin/unicorn_rails", "-c", "/var/www/pinpg_prot/current/config/unicorn.rb", "-E", "staging", "-D", {12=>#<Kgio::UNIXServer:fd 12>, 13=>#<Kgio::TCPServer:fd 13>}] (in /var/www/pinpg_prot/releases/20150520004521)

/var/www/pinpg_prot/current/vendor/bundle/ruby/2.1.0/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:475:in `exec': No such file or directory - /var/www/pinpg_prot/releases/20150515054058/vendor/bundle/ruby/2.1.0/bin/unicorn_rails (Errno::ENOENT)

おかしいかな、なんでbin/unicornは1vendor/bundleに置いたのでしょうか。

デプロイのログを確認してみたら、問題を発見しました。

bundle install --without development test --deployment --quiet

上記はgemをインストールしたコマンドですね。問題なのは--deploymentです。

--deploymentとは管理権限を持たないサーバーにデプロイする場合、プロジェクトディレクトリにvendorディレクトリを作成し、gemをインストールするというアプローチです。

管理権限を持つ場合、--deploymentが不要でしょうか。解決方法は--deploymentを外すだけで、すごく簡単です。config/deploy.rbに以下の設定を追加したら、解決完了です。

set :bundle_flags, "--quiet"