紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Ruby2.6.0】find_spec_for_exe: can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException) エラーの解決方法

f:id:yokoyantech:20190111165620p:plain

はじめに

新年早々ハマったのでメモ。 今年の1月から同様の事象が発生しているように見受けられます。

stackoverflow.com

結論

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のバグ。

bundler.io

対処方法

案1 bundlerのバージョンを下げる

ググるとだいたいこの方法がヒットする。 詳細は以下のサイト参照。

blog.hokkai7go.jp

qiita.com

案2 Ruby2.6.0を使う

Bundlerが標準で組み込まれたため、Ruby2.6.0を使用する。 自分のプロダクトの今後を考えるとこっちのほうが良さそう、ということでこっちを採用。

Bundler を Default gems として標準添付しました。

www.ruby-lang.org