はじめに
新年早々ハマったのでメモ。 今年の1月から同様の事象が発生しているように見受けられます。
結論
Ruby2.6.0を使えば解決します。
やりたいこと
- まっさらなEC2にRubyを入れて、Unicornをインストールしたい
実行環境
$ ruby --version ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
$ which bundler /home/ubuntu/.rbenv/shims/bundler
発生したエラー
- CodeDeployがいつまで経っても失敗するなと思ったら、Unicornの起動に失敗していた。
$ sudo systemctl status unicorn ● unicorn.service - Staging Unicorn Server Loaded: loaded (/lib/systemd/system/unicorn.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Fri 2019-01-11 11:40:00 JST; 7min ago Process: 4574 ExecStart=/home/ubuntu/.rbenv/shims/bundle exec unicorn_rails -c /home/ubuntu/hoge/config/unicorn.rb -E staging (code=exited, status=1/FAILURE) Main PID: 4574 (code=exited, status=1/FAILURE) Jan 11 11:40:00 ip-10-2-3-58 systemd[1]: Started Staging Unicorn Server. Jan 11 11:40:00 ip-10-2-3-58 unicorn[4574]: /home/ubuntu/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException) Jan 11 11:40:00 ip-10-2-3-58 unicorn[4574]: from /home/ubuntu/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path' Jan 11 11:40:00 ip-10-2-3-58 unicorn[4574]: from /home/ubuntu/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
原因
Gemfile.lock
に記載されているBUNDLE_WITHのバージョンと、bundler
のバージョンが異なるため。
Gemfile.lock
RUBY VERSION ruby 2.5.1p57 BUNDLED WITH 1.17.1
bundlerのバージョン確認
$ bundler -v Bundler version 2.0.1
$ gem list *** LOCAL GEMS *** bigdecimal (default: 1.3.4) bundler (2.0.1)
根本的な原因
bundler2
のバグ。
対処方法
案1 bundlerのバージョンを下げる
ググるとだいたいこの方法がヒットする。 詳細は以下のサイト参照。
案2 Ruby2.6.0を使う
Bundlerが標準で組み込まれたため、Ruby2.6.0を使用する。 自分のプロダクトの今後を考えるとこっちのほうが良さそう、ということでこっちを採用。
Bundler を Default gems として標準添付しました。