53 votes

Rails 3 - Erreurs Bundler / Capistrano

J'ai une base de Rails 3, app de travail en local sur mon développement de la boîte, mais vous voulez tester le déploiement dès le début pour s'assurer que tout fonctionne. Je suis l'aide de Capistrano à déployer.

Lorsque j'exécute cap deploy (après tous les autres d'installation nécessaires), elle tombe sur cette commande avec cette erreur:

[...]
* executing 'bundle:install'
* executing "bundle install --gemfile /var/www/trex/releases/20100917172521/Gemfile --path /var/www/trex/shared/bundle --deployment --quiet --without development test"

servers: ["www.[my domain].com"]
[www.[my domain].com] executing command
** [out :: www.[my domain].com] sh: bundle: command not found
command finished
[...]

Donc il ressemble, il ne peut pas trouver l' bundle de commande sur le serveur.

Cependant, lorsque je me connecte sur le serveur...

$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
$ rails -v
Rails 3.0.0
$ bundle -v
Bundler version 1.0.0

...l' bundle commande fonctionne très bien.

Ce qui pourrait mal se passer?

-

(En outre, pour être complet:)

$ which ruby
~/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
$ which rails
~/.rvm/gems/ruby-1.9.2-p0/bin/rails
$ which bundle
~/.rvm/gems/ruby-1.9.2-p0/bin/bundle

89voto

T.J. Schuck Points 2684

Mise à JOUR:

Pour RVM >= 1.11.3, il vous suffit d'utiliser le rvm-capistrano gem. Pour les anciens RVM >= 1.0.1, la réponse ci-dessous s'applique toujours.


RÉPONSE ORIGINALE À CETTE QUESTION:

Bon, si j'ai toujours n'ai pas réussi à plein cap deploy de travail, je n'ai corrigé ce problème. Le problème a été Capistrano essayez d'utiliser un chemin d'accès différent pour Bundler (et d'autres pierres précieuses) que le RVM chemins.

Vérifiez votre Capistrano chemin en faisant cap shell, alors echo $PATH. Vous aurez probablement voir votre standard /usr/local/bin et /usr/bin, mais ce n'est pas RVM a Bundler, et coll., stockée.

Modifier votre Capistrano config/deploy.rb le fichier, et ajouter les lignes suivantes, par ces instructions:

# Add RVM's lib directory to the load path.
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))

# Load RVM's capistrano plugin.    
require "rvm/capistrano"

set :rvm_ruby_string, '1.9.2'
set :rvm_type, :user  # Don't use system-wide RVM

Qui a finalement obtenu Capistrano pour voir Bundler et de commencer le chargement des gemmes de façon appropriée.

26voto

Pete Campbell Points 231

Bundler n'est pas trouvé, parce que .bash_profile n'est pas chargé et donc votre CHEMIN est mauvais. C'est probablement parce que vous avez le RVM de script .bash_profile.

La réponse la plus simple est de déplacer le RVM de script .bash_profile .bashrc et Capistrano devrait être capable de le trouver (vérifiez également que .bash_profile sources .bashrc).

Capistrano utilise SSH pour exécuter des commandes sur le serveur par l'intermédiaire d'un non-shell interactif. Cette coque session sera de la source .bashrc mais pas .bash_profile. J'ai ajouté un ÉCHO déclaration et a couru un LS via SSH. Vous pouvez voir les résultats ci-dessous que seul .bashrc est d'origine:

$ ssh user@123.amazonaws.com ls
.bashrc loaded
git
file1
file2

11voto

Lelon Points 725

J'ai eu un problème identique en utilisant Rbenv. La solution consistait à prendre les lignes spécifiques à rbenv du bas de mon fichier .bashrc et à les mettre en haut. La première ligne de mon fichier .bashrc renvoyait en cours d'abandon si le shell ne fonctionnait pas en mode interactif.

7voto

RussK Points 73

Cette dernière ligne devrait en fait être

 set :rvm_type, :user
 

c’est-à-dire que l’utilisateur doit être un symbole et non une variable, sinon vous aurez

 undefined local variable or method `user'
 

7voto

hipertracker Points 1417

Aucun rvm/capistrano n'a travaillé pour moi. La meilleure solution que j'ai trouvée consistait à ajouter à deploy.rb fichier suivant (il s'agit d'un RVM non système):

set :bundle_cmd, 'source $HOME/.bash_profile && bundle'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X