【GemNotFound】Capistranoを用いた自動デプロイにてUnicornが再起動しないエラーについて

こんばんわ
今回はcapistranoを使った自動デプロイにてunicornが再起動しないエラーについて記事を書きたいと思います。たくさん参考になる記事はありますが、自分の備忘録のために書いていきたいと思います。

ハマったエラー

# Gemfileが見つからないエラー
I, [2020-06-13T06:11:10.779641 #3346] INFO -- : executing ["/var/www/FesLive-app/shared/bundle/ruby/2.5.0/bin/unicorn", "-c", "/var/www/FesLive-app/current/config/unicorn.rb", "-E", "deployment", "-D", {8=>#}] (in /var/www/FesLive-app/releases/20200613061044)
/home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bundler-2.0.2/lib/bundler/spec_set.rb:87:in `block in materialize': Could not find bindex-0.8.1 in any of the sources (Bundler::GemNotFound)

# unicorn再起動がうまくいかなかったときに出るエラー
E, [2020-06-13T06:11:10.960012 #30571] ERROR -- : reaped # exec()-ed

解決法

エラー文を見ると、「GemNotFound」とありGemファイルが見つからないため、Unicorn再起動ができていない状態であることが分かります。
Gemfileはもちろんあるのになぜエラーになっているのか。それはGemfile読み込み時に過去のディレクトリのGemfileを参照しているため起こるようです。(原因は不明)
なので、unicorn.rbにgemfileのディレクトリを明示してあげると解決しました。

unicorn.rb

app_path = File.expand_path('../../../', __FILE__)
# 追記
before_exec do |server|
  ENV['BUNDLE_GEMFILE'] = "#{app_path}/current/Gemfile"
end

上の記載をした後、コミット&プッシュ行い、自動デプロイの前に一度手動でunicornのmasterをkillすることで変更が反映され、次回からの自動デプロイでは上のようなエラーは出なくなりました。

最後に

今回は短いですが、以上になります。
ここまで読んでくださり、ありがとうございました。分かりにくいやアドバイス等ありましたらコメントくださると幸いです。では!