web-dev-qa-db-fra.com

Elastic Beanstalk Ruby / Rails doit installer git pour que l'installation du bundle fonctionne .. mais n'est pas

Je rencontre un problème lors du déploiement de notre application Rails .. J'ai créé un crochet comme l'exemple sur le guide du blog AWS http://Ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic-Beanstalk-with-Git comme:

packages:
  yum:
    git: []

même si j'exécute un paquet pour créer un fournisseur/cache pour y avoir tous les joyaux ... et obtenir toujours: git: //github.com/refinery/refinerycms-search.git (à 2-0-stable) n'est pas vérifié en dehors. Veuillez exécuter bundle install (Bundler :: GitError)

toute aide sera agréable, nous essayons de déplacer toutes nos applications vers EB. mais vu que git ne s'installe pas ou quelque chose se passe .. J'ai besoin de git sur l'instance EB ec2 qu'il crée.

Trace de la pile:

Error message:
git://github.com/refinery/refinerycms-search.git (at 2-0-stable) is not checked out.         Please run `bundle install` (Bundler::GitError)
Exception class:
PhusionPassenger::UnknownError
Application root:
/var/app/current
Backtrace:
#   File    Line    Location
0   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 801 in        `rescue in load_spec_files'
1   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 799 in   `load_spec_files'
2   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 381 in `local_specs'
3   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 774 in `specs'
4   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 174 in `block in resolve'
5   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 172 in `each'
6   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 172 in `resolve' 
7   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 113 in `specs'
8   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 158 in `specs_for'
9   /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 147 in `requested_specs'
10  /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/environment.rb    23  in `requested_specs'
11  /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/runtime.rb    11   in `setup'
12  /usr/share/Ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler.rb    116 in `setup'
13  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/utils.rb    326 in `prepare_app_process'
14  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/rack/application_spawner.rb 156 in `block in initialize_server'
15  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/utils.rb    563 in `report_app_init_status'
16  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/rack/application_spawner.rb 154 in `initialize_server'
17  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-  1002/support/lib/phusion_passenger/abstract_server.rb    204 in `start_synchronously'
18  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server.rb  180 in `start'
19  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/rack/application_spawner.rb 129 in `start'
20  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   253 in `block (2 levels) in spawn_rack_application'
21  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server_collection.rb   132 in `lookup_or_add'
22  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   246 in `block in spawn_rack_application'
23  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server_collection.rb   82  in `block in synchronize'
24      prelude>    10:in `synchronize'
25  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server_collection.rb   79  in `synchronize'
26  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   244 in `spawn_rack_application'
27  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   137 in `spawn_application'
28  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager.rb    16  in `spawn_application_with_env'
29  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/spawn_manager_orig.rb   275 in `handle_spawn_application'
30  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server.rb  357 in `server_main_loop'
31  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/lib/phusion_passenger/abstract_server.rb  206 in `start_synchronously'
32  /var/lib/passenger-standalone/3.0.17-x86_64-Ruby1.9.3-linux-gcc4.4.6-1002/support/helper-scripts/passenger-spawn-server

MISE À JOUR plus d'informations: j'ai décidé de me connecter à l'instance avec ec2-user et de remarquer que git est installé les gemmes dont j'ai besoin SONT installées jusqu'à présent je peux voir .. quand je fais la liste des bundles ils apparaissent tous même celui que l'erreur est Je me plains .. Je remarque que lorsque je fais une liste générale de pierres précieuses, elle n'apparaît pas ... mais elle devrait utiliser celle du bundle.

40
cfernandezlinux

( Notez que la solution de contournement suivante ne doit être utilisée que si vous devez utiliser des sources Git pour les dépendances. Il est recommandé de ne pas installer les dépendances à partir de sources externes Dépôts Git si cela peut être évité. Voir ci-dessous pour plus de détails sur pourquoi.)

Lorsque vous utilisez des bibliothèques soutenues par Git dans un Gemfile avec Passenger, vous doit désactiver les gemmes partagées dans une installation (en plus d'installer Git dans le hook que vous avez indiqué ci-dessus). Vous pouvez le faire en définissant le BUNDLE_DISABLE_SHARED_GEMS Variable d'environnement Bundler dans votre .ebextensions/Ruby.config fichier comme ceci:

option_settings:
  - option_name: BUNDLE_DISABLE_SHARED_GEMS
    value: "1"
  - option_name: BUNDLE_PATH
    value: "vendor/bundle"

packages:
  yum:
    git: []

La désactivation des gemmes partagées forcera toutes les dépendances à être vendues dans votre application dans vendor/bundle comme spécifié par le BUNDLE_PATH variable.

Notez que, dans la mesure du possible, vous devez éviter d'installer des bibliothèques publiques à partir de sources Git avec votre application. L'utilisation de Git pour les emplacements de bibliothèque introduit un autre point d'échec pour une installation de déploiement, car le référentiel Git peut être temporairement indisponible ou même déplacé de manière permanente. Gardez également à l'esprit que le fait de forcer les installations vendues dans un déploiement entraînera des déploiements Elastic Beanstalk beaucoup plus lents lors des déploiements ultérieurs d'une application avec les mêmes dépendances. Cela est dû au fait que les bibliothèques seront réinstallées à chaque déploiement au lieu de profiter de l'installation à l'échelle du système qu'Elastic Beanstalk fait exécuter par Bundler par défaut.

En bref, s'il existe une version officielle RubyGem de la bibliothèque en question, vous devriez utiliser cette version à la place; et sinon, vous devriez suggérer à l'auteur de la bibliothèque qu'une version officielle de RubyGem soit disponible.

Pour info, une question similaire à propos de ce problème Git avec les déploiements Passenger/Rails réguliers a été posée précédemment: Rails 3: Passenger ne peut pas trouver de git git installés par bundler

54
Loren Segal

Une autre option consiste à empaqueter la source de gemme directement avec votre application, puis à pointer bundler sur celle-ci.

Copiez la source de gemme dans vendor/gems/mygem

Ensuite, dans votre Gemfile:

gem 'mygem', path: File.join(File.dirname(__FILE__), 'vendor', 'gems', 'mygem')

Voir plus ici: http://viget.com/extend/bundler-best-practices

11
Micah

Elastic Beanstalk d'Amazon Ruby AMI a besoin d'un petit ajustement afin de vous permettre de regrouper des gemmes de git sans sacrifier la vitesse de déploiement, comportement que vous obtenez hors de la boîte avec Capistrano et Heroku.

Heureusement, l'API de configuration Elastic Beanstalk permet les ajustements nécessaires sans vous obliger à maintenir une AMI personnalisée.

Voici la configuration Elastic Beanstalk que j'utilise pour obtenir le comportement de déploiement souhaité Ruby avec la propre AMI d'Amazon: https://github.com/gkop/elastic-beanstalk-Ruby .

6
Gabe Kopley

Après avoir essayé la réponse acceptée, j'ai constaté qu'un .ebextensions/Ruby.config était la seule configuration qui fonctionnait:

packages:
  yum:
    git: []
3
Justin Tanner
  • ok bien après beaucoup de recherches et de tests, je pense que cela était lié au fait qu'Amazon avait des problèmes avec les valeurs d'env pour les passagers ...
  • J'ai pu exécuter manuellement Rails s, puis cela a bien fonctionné et toutes les gemmes ont été chargées .. mais avec le passager, il n'a pas trouvé que si je courais

    pack bundle - tous

  • - tous donc il contient également les gemmes git ..

  • il fonctionnera alors comme un charme ..

  • pour pouvoir exécuter cette opération dans le même temps, Amazon résout ce problème avec le bundle.Je crée un hook et le force à s'exécuter après chaque installation. pas la meilleure façon mais ça marche.

Remarque: en utilisant le crochet que je ne peux pas voir pour exécuter la commande sur les mises à jour EB, j'ai donc ajouté le fournisseur/cache et il télécharge tout par défaut.

2
cfernandezlinux