web-dev-qa-db-ja.com

Elastic Beanstalk:実行可能なバンドル(Gem :: GemNotFoundException)を持つgemバンドル(> = 0.a)が見つかりません

このエラーメッセージは、よく知られているエラーメッセージです。 (たとえば、 https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html を参照してください)。 Ruby 2.6.1、およびbundler 2.0.1の新しいElastic Beanstalkアプリケーションを使用すると、エラーは次のようになります。

  /opt/rubies/Ruby-2.6.1/lib/Ruby/site_Ruby/2.6.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
from /opt/rubies/Ruby-2.6.1/lib/Ruby/site_Ruby/2.6.0/rubygems.rb:308:in `activate_bin_path'
from /opt/rubies/Ruby-2.6.1/bin/bundle:23:in `<main>' (ElasticBeanstalk::ExternalInvocationError)

次のファイルを入れてみました:01_install_bundler.configフォルダーに.ebextensions

container_commands:
  01_install_bundler:
    command: "gem install bundler —-version 2.0.1"

これは実行されませんが、上記のエラーを確認すると、デプロイプロセスのこの時点で発生していることがわかります。

.../AppDeployStage0/AppDeployPreHook/10_bundle_install.sh] : Activity failed.

(つまり、AppDeployPreHookスクリプトのbundle installコマンドの実行中)。 PlatformHooksのリファレンスについては、 https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/custom-platform-hooks.html を参照してください。

使用しているバンドラーのバージョンがバージョン2.0.0以上であることを確認できれば、問題はないと確信しています。それを簡単に指定する方法はわかりませんが。現時点では、サーバーに/opt/elasticbeanstalk/hooks/appdeploy/pre/でsshして、スクリプトを編集して操作しています。明らかに自動化された、繰り返し可能な方法が必要ですが。

Ruby 2.6.1がデフォルトでbundlerバージョン2.0.0を選択していないことにイライラしています。何かアイデアはありますか?

==============================

更新:

ファイルを編集した場合/opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh

if [ -f Gemfile ]; then
  echo "running 'bundle install' with Gemfile:"
  cat Gemfile

  +++ gem install bundler +++
  if [ -d $EB_APP_STAGING_DIR/vendor/cache ]; then
    bundle install --local
  else
    bundle install
  fi
else
  echo "no Gemfile found! Skipping bundle install stage!"
fi

gem install bundler(プラスなし)を追加すると、最新のバンドラー2.0.1がインストールされるため、問題が解決します。ハッキングについて知りたい人のために、コマンドは次のとおりです。

eb ssh

Sudo -i

cd /opt/elasticbeanstalk/hooks/appdeploy/pre

vim 10_bundle_install.sh

このソリューションの問題は、.ebextensionsを使用しないため、少しハックのように感じられることです。これを修正するより適切な方法はありますか?

11
stwr667

ロックファイルの生成に使用された正しいバージョンのバンドラーが必要です。そのバージョンを確認するには、次のコマンドを使用します

$ cat Gemfile.lock | grep -A 1 "BUNDLED WITH"
BUNDLED WITH
   1.17.3
0
slushy-chivalry