Ce message d'erreur est un message d'erreur bien connu. (voir https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html par exemple.) Bien que je l'obtienne avec une nouvelle application Elastic Beanstalk avec Ruby 2.6.1 et bundler 2.0.1. L'erreur est:
/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)
J'ai essayé de mettre le fichier suivant: 01_install_bundler.config
dans le .ebextensions
dossier:
container_commands:
01_install_bundler:
command: "gem install bundler —-version 2.0.1"
Bien que cela ne soit jamais exécuté parce que si je regarde l'erreur ci-dessus, je peux voir que cela se produit à ce stade du processus de déploiement:
.../AppDeployStage0/AppDeployPreHook/10_bundle_install.sh] : Activity failed.
(c'est-à-dire pendant le bundle install
commande d'un script AppDeployPreHook). Voir https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/custom-platform-hooks.html pour la référence de PlatformHooks.
Je suis presque sûr que si je peux m'assurer que la version du bundler utilisé est au moins la version 2.0.0, alors il n'y aura pas de problème. Bien que je ne sache pas comment spécifier cela facilement. En ce moment, je vais au serveur pour /opt/elasticbeanstalk/hooks/appdeploy/pre/
pour éditer et jouer avec les scripts. Bien que j'aie évidemment besoin d'une manière automatisée et reproductible de le faire.
Il est frustrant que Ruby 2.6.1 ne choisit pas le bundler version 2.0.0 par défaut. Des idées?
==============================
Mettre à jour:
Si je modifie le fichier /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
et ajoutez le gem install bundler
(sans les avantages), cela résout le problème car il installe le dernier bundler, qui est 2.0.1. Pour ceux qui veulent connaître le hack, les commandes étaient:
eb ssh
Sudo -i
cd /opt/elasticbeanstalk/hooks/appdeploy/pre
vim 10_bundle_install.sh
Le problème avec cette solution est qu'elle se sent un peu comme un hack car elle n'utilise pas .ebextensions
. Existe-t-il un moyen plus approprié de résoudre ce problème?
Vous avez besoin de la version correcte du bundle avec lequel le fichier de verrouillage a été généré. Pour connaître cette version, utilisez la commande suivante
$ cat Gemfile.lock | grep -A 1 "BUNDLED WITH"
BUNDLED WITH
1.17.3