UnicornにUSR2シグナル送って、再起動する時、エラーが出る
Bài đăng này đã không được cập nhật trong 9 năm
サーバーの環境
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"
All rights reserved