Это сообщение об ошибке является хорошо известным сообщением об ошибке. (см., например, https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html.) Хотя я получаю его с новым приложением Elastic Beanstalk с Ruby 2.6.1 и пакетом 2.0.1. Ошибка:
/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.
(т. Е. Во время команды bundle install
сценария AppDeployPreHook). См. https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platform-hooks.html для ссылки на PlatformHooks.
Я вполне уверен, что если я смогу убедиться, что используемая версия компоновщика имеет версию не ниже 2.0.0, то проблем не будет. Хотя я не знаю, как я могу это легко указать. На данный момент я ssh'ing к серверу на /opt/elasticbeanstalk/hooks/appdeploy/pre/
, чтобы редактировать и возиться со сценариями. Хотя мне, очевидно, нужен автоматизированный, повторяемый способ сделать это.
Обидно, что ruby 2.6.1 по умолчанию не выбирает версию 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
. Есть ли более правильный способ исправить это?