久しぶりにQiita書くよ!
ruby (1.9.3p194)
rails (3.2.2)
capistrano (2.12.0)
unicorn (4.3.1)
--
なにがおこっていたか
Unicornを再起動(人によってはリロードと呼ぶ)をするときUSR2シグナルを送りますよね。
kill -s USR2 `cat unicorn.pid`
みたいな。
んで、これでだいたいはうまくいっていたんだけど、
アプリケーションコードの再読み込み時々うまくいかないことがありました。
下記みたいに無理やり再起動すりゃいんだけど。
kill -s QUIT `cat unicorn.pid`
unicorn_rails ...
気持ち悪いので調べてみたら、UnicornがログでBundler::GemfileNotFoundを吐いていた。
今まで気づかなくてゴメン!!!って感じです。
ヤバイんで止まらずに動いててくれたって感じっすね。
--
どうしたか
ぐぐったら普通にでてきました。
素晴らしい記事。
FIXING THE GEMFILE NOT FOUND (BUNDLER::GEMFILENOTFOUND) ERROR
http://blog.willj.net/2011/08/02/fixing-the-gemfile-not-found-bundlergemfilenotfound-error/
この人も苦労したみたいだけど、
要するにcapistranoの前のデプロイ先のGemfileを参照しているから問題なんだよ!って話。
だから無理やりsymlinkを通した指定をしてあげましょう。
before_exec do |server|
ENV['BUNDLE_GEMFILE'] = "/path/to/app/current/Gemfile"
end
設定変えた後はUSR2じゃなくて一度設定読み直さなきゃいけないので、一度落としましょ。
(HUPシグナルでもいけんのかな?試してないので分からん)
--
感想
capistrano-unicornってgemあったけど、うまくハマらなかったので結局入れなかったんだよねー
そういうcapistrano integration系のgemでスッキリいくと楽なんだが。
このdeploy.rbでゴリゴリ対応するあたりが楽しく感じつつも苦しかったり。
でもでも、解決法がだいたい提示されているRubyコミュニティってすごい。
こんな感じでした。