Rails cron whenever, bundle: commande introuvable

j'essaie d'utiliser n'importe quand pour exécuter une tâche de râteau onces par jour. Im obtenir 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 mon 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 comprends pas pourquoi ça ne fonctionne pas. Si je lance 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

ça marche très bien, je ne sais pas ce qui se passe ici.

44
demandé sur Josh Crowder 2012-02-28 16:55:27

12 réponses

vous pouvez également vous assurer que votre chemin se termine dans le crontab, en mettant ce qui suit en haut de l'horaire.rb fichier:

env :PATH, ENV['PATH']

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

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

env :GEM_PATH, ENV['GEM_PATH']
58
répondu Dennis Kuczynski 2014-10-22 10:18:25

Après de nombreux essais suivants semble fonctionner

tapez ce qui suit depuis le terminal

  1. Tapez la commande " crontab-e Cela 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. commentez les deux lignes en commençant par le chemin.

faites l'étape ci-dessus chaque fois que vous lancez la commande "bundle exec whenever". Et il fonctionne.

aucune idée pourquoi le chemin est trompeuse de l'environnement.

4
répondu buddy 2012-09-12 11:17:44

Dans mon cas, j'ai juste couru :

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

faisant référence à cron job d'installation doc

ajout d'une nouvelle ligne source à la commande ruby path avant de faisceau de commande 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

Cheers!!!

4
répondu Sumit Munot 2015-10-22 01:32:22

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

Ce qui fonctionne pour moi est d'ajouter

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

avant la commande bundle.

3
répondu cailinanne 2012-02-28 18:20:12

je pense que vous devriez essayer de définir explicitement les variables D'environnement GEM_HOME et GEM_PATH dans votre crontab. Vous pouvez aussi essayer de lancer quelque chose comme gem list --local ou gem environment par cron et vérification de la sortie.

1
répondu Sebi 2012-02-28 15:57:50

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

vous lancez une commande bash en tant qu'interpréteur de commandes de connexion qui va à source (execute) /etc/profile bash fichier comme un fichier de configuration. En faisant cela, si vous vérifiez ce fichier, il pourrait avoir des lignes de commande bash qui effacent votre $PATH ce que vous ne voulez pas car il contient votre chemin vers votre paquet et toutes vos autres commandes en premier lieu.

Pour résoudre ce problème il vous suffit de supprimer les lignes liées à configurer /etc/profile fichier.

1
répondu axzwl 2018-01-15 18:47:49

j'ai joué avec ça tout l'après-midi et je n'ai pas pu trouver une meilleure solution. Voici ce que j'ai

bundle install --binstubs

et puis exécutez

bin/rake daily:stats
0
répondu Josh Crowder 2012-02-28 17:51:58

il s'agit d'un ENV['PATH'] pas de problème défini. La façon la plus élégante de corriger ceci est d'ajouter les scripts relatifs à la rvm au chemin juste après l'installation. Ajouter les lignes suivantes au début de .bashrc ( début et pas de fin que lorsque .bashrc est accessible par un shell non-interactif, la ligne [ -z "$PS1" ] && return déclenche 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
répondu Lavixu 2013-07-25 12:31:23

Oubliez les paramètres de chemin dans les fichiers cron. Définir le CHEMIN d'accès ne fonctionne pas.

définissez explicitement le chemin vers le bundle dans votre config/schedule.rb

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

0
répondu vanboom 2014-12-28 18:38:29

Vous pouvez essayer la solution ci-dessous que j'ai trouvé en googlant et qui fonctionne pour moi finalement....espérons que devrait travailler avec vous.

j'ai mis en œuvre et testé la même chose sur la production assurez-vous que de changer l'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 simple ce qui a donné sur la documentation de gem sur la production.

J'utilise Ruby 2.X et Rails 4.2 avec whenever 0.9.4 dernière version. Il devrait travailler avec une version antérieure ainsi, si la nature de la question est la même.

je vous remercie.

0
répondu Rameshwar Vyevhare 2016-03-16 13:52:51

pour les correctifs modernes, ajouter cette ligne dans capistrano deploy.rb,

set :whenever_command, "bundle exec whenever"
-1
répondu chagel 2013-08-08 08:41:46

[root@smbserver actuel]# crontab -e

02 22 * * 1-5 /bin/bash -l -c  /shell/day.sh 
30 14 * * 0 /bin/bash -l -c  /shell/week.sh 
-4
répondu iceskysl 2013-07-11 04:11:08