LoginSignup
80
80

More than 5 years have passed since last update.

UnicornにUSR2シグナル送っても無視される(Bundler::GemfileNotFound)

Posted at

久しぶりに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を通した指定をしてあげましょう。

deproy.rb
before_exec do |server|
  ENV['BUNDLE_GEMFILE'] = "/path/to/app/current/Gemfile"
end

設定変えた後はUSR2じゃなくて一度設定読み直さなきゃいけないので、一度落としましょ。
(HUPシグナルでもいけんのかな?試してないので分からん)

--

感想

capistrano-unicornってgemあったけど、うまくハマらなかったので結局入れなかったんだよねー
そういうcapistrano integration系のgemでスッキリいくと楽なんだが。

このdeploy.rbでゴリゴリ対応するあたりが楽しく感じつつも苦しかったり。
でもでも、解決法がだいたい提示されているRubyコミュニティってすごい。

こんな感じでした。

80
80
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
80