web-dev-qa-db-fra.com

Rails cron à chaque fois, bundle: commande introuvable

J'essaie d'utiliser chaque fois pour exécuter une tâche de râteau une fois par jour. Je reçois cette erreur

/bin/bash: bundle: command not found
/home/app/.rvm/rubies/Ruby-1.9.2-p180/lib/Ruby/site_Ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [minitest-1.6.0, rake-0.8.7, rdoc-2.5.8] (Gem::LoadError)
        from /home/app/.rvm/rubies/Ruby-1.9.2-p180/lib/Ruby/site_Ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /home/app/.rvm/rubies/Ruby-1.9.2-p180/lib/Ruby/site_Ruby/1.9.1/rubygems.rb:1210:in `gem'
        from /home/app/.rvm/gems/Ruby-1.9.2-p180/bin/bundle:18:in `<main>'

Voici ma crontab

# Begin Whenever generated tasks for: /home/af/www/app/releases/20120216172204/config/schedule.rb
PATH=/home/af/.rvm/gems/Ruby-1.9.2-p180@global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

0 0 * * * /bin/bash -l -c 'cd /home/af/www/app/releases/20120216172204 && rvm 1.9.1-p180; Rails_ENV=production /home/af/.rvm/gems/Ruby-1.9.2-p180/bin/bundle exec rake daily:stats --silent >> /home/af/www/app/releases/20120216172204/log/cron.log 2>&1'

# End Whenever generated tasks for: /home/af/www/app/releases/20120216172204/config/schedule.rb

Je ne sais pas pourquoi cela ne fonctionne pas. Si j'exécute la commande:

cd /home/af/www/app/releases/20120216172204 && rvm 1.9.1-p180; Rails_ENV=production /home/af/.rvm/gems/Ruby-1.9.2-p180/bin/bundle exec rake daily:stats --silent >> /home/af/www/app/releases/20120216172204/log/cron.log 2>&1

Cela fonctionne bien, je ne sais pas ce qui se passe ici.

45
Josh Crowder

J'ai joué avec tout cet après-midi et je n'ai pas pu trouver de meilleure solution. Voici ce que j'ai trouvé

bundle install --binstubs

puis exécutez

bin/rake daily:stats
1
Josh Crowder

Vous pouvez également vous assurer que votre PATH se retrouve dans la crontab, en plaçant ce qui suit en haut du fichier schedule.rb:

env :PATH, ENV['PATH']

https://groups.google.com/forum/#!msg/whenever-gem/yRLt3f2jrfU/Exu3xfCo8DAJ

Si la solution ci-dessus ne fonctionne pas pour vous, essayez:

env :GEM_PATH, ENV['GEM_PATH']
59
Dennis Kuczynski

Après tant d'essais, ce qui suit semble fonctionner

Tapez ce qui suit à partir du terminal

  1. Tapez crontab -e Ceci ouvre la crontab pour l'édition. Vous verrez deux lignes comme ci-dessous:

    # cron clears out environment variables, but Rubber.root/script/rubber uses
    # "rvm do default" to run, so no longer any need to setup Ruby env vars here,
    # all we need is PATH
    PATH=/<path to bundle>/bundle/Ruby/1.9.1/bin:/usr/local/rvm/gems
    

    ET

    # Begin Whenever generated tasks for: /mnt/wamjoke-production/releases/20120912$
    PATH=/<path to bundle>/shared/bundle/Ruby/1.9.1/bin:/usr/local/rvm/gems
    
  2. Mettez en commentaire les deux lignes commençant par PATH.

Effectuez l'étape ci-dessus à chaque fois que vous exécutez la commande "bundle exec. Et il fonctionne.

Aucune idée pourquoi PATH induit en erreur l'environnement.

4
buddy

Dans mon cas, je viens de courir:

rvm env --path -- Ruby-version[@gemset-name]

Se référant à doc de configuration de tâche cron

Ajout d'une nouvelle ligne source à la commande pour Ruby chemin avant la commande bundle dans le crontab -e

source /usr/local/rvm/environments/Ruby-1.9.3-p392;

Maintenant, les commandes comme ci-dessous:

Avant:

0 4 * * * cd /home/current && bundle exec rake my_rake Rails_ENV=production

Après:

0 4 * * * cd /home/current && source /usr/local/rvm/environments/Ruby-1.9.3-p392; bundle exec rake my_rake Rails_ENV=production

À votre santé!!!

4
Sumit Munot

Je déteste ce problème - j'ai aussi passé des heures à essayer de le résoudre.

Ce qui fonctionne pour moi, c'est d'ajouter

Rails_ENV=production; source /usr/local/rvm/scripts/rvm;

avant la commande de bundle.

3
cailinanne

En exécutant une commande de cette façon: /bin/bash -l -c

Vous lancez une commande bash en tant que shell de connexion qui va source (exécuter) /etc/profile fichier bash en tant que fichier d'installation. Ce faisant, si vous vérifiez ce fichier, il peut y avoir des lignes de commande bash qui effacent votre précédent $PATH ce que vous ne voulez pas car il contient en premier lieu votre chemin vers votre bundle et toutes vos autres commandes.

Pour résoudre ce problème, il vous suffit de supprimer les lignes liées à la configuration de $PATH variable dans votre /etc/profile fichier.

1
axzwl

Oubliez les paramètres PATH dans les fichiers cron. La définition du CHEMIN ne fonctionne pas.

Définissez le chemin à regrouper explicitement dans votre config/schedule.rb

set: bundle_command, "/ usr/local/bin/bundle"

1
vanboom

Je pense que vous devriez essayer de définir explicitement les variables d'environnement GEM_HOME et GEM_PATH dans votre crontab. Vous pouvez également essayer d'exécuter quelque chose comme gem list --local ou gem environment via cron et vérification de la sortie.

1
Sebi

Il s'agit d'un problème ENV ['PATH'] non défini. La façon la plus élégante de résoudre ce problème consiste à ajouter les scripts liés à rvm au chemin juste après l'installation. Ajoutez les lignes suivantes au début de .bashrc (commençant et ne se terminant pas comme lorsque .bashrc est accessible par un shell non interactif, la ligne [ -z "$PS1" ] && return renvoie une erreur et les lignes suivantes ne sont pas exécutées.

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

et ne pas essayer de définir explicitement les variables d'environnement PATH et sully.

0
Lavixu

Vous pouvez essayer ci-dessous la solution que j'ai trouvée en recherchant sur Google et qui fonctionne enfin pour moi .... j'espère que cela devrait fonctionner avec vous.

J'ai implémenté et testé les mêmes sur la production, assurez-vous de changer d'environnement en conséquence -

set :output, "{your path on the server}/log/cron_log.log"
 set :environment, :production
 env :PATH, ENV['PATH']
 job_type :rbenv_rake, %q!eval "$(rbenv init -)"; cd :path && :environment_variable=:environment bundle exec rake :task --silent :output!

Bonne chance, ce problème s'est produit après 3 ans car j'utilisais avant tout simplement ce qui était indiqué sur la documentation de la gemme sur la production.

J'utilise Ruby 2.x et Rails 4.2 avec la dernière version 0.9.4 à chaque fois. Cela devrait également fonctionner avec la version antérieure, si la nature de le problème est le même.

merci.

0
Rameshwar Vyevhare