Forum: Rails France Mes tâches rake ne fonctionnent pas avec cron

021222f0f1f650732fec78ab353547ab?d=identicon&s=25 Julien Lestavel (butterhead)
on 2010-02-04 15:50
Salut à tous,

Je rencontre un problème avec mes tâches rake programmées par un cron :
une erreur me dit que le gem rack 1.0.1 n'est pas présent. Or, si je
lance les tâches manuellement en ligne de commande, l'erreur ne survient
pas.

Voilà la commande que je lance dans mon cron :
0  5  * * * cd /home/user/site && /usr/local/bin/rake task
RAILS_ENV=production

Et voilà le début de la stack trace

rake aborted!
Could not find RubyGem rack (~> 1.0.1)
/home/user/site/config/../vendor/rails/railties/lib/initializer.rb:271:in
`require_frameworks'
/home/user/site/config/../vendor/rails/railties/lib/initializer.rb:134:in
`process'
/home/user/site/config/../vendor/rails/railties/lib/initializer.rb:113:in
`send'
/home/user/site/config/../vendor/rails/railties/lib/initializer.rb:113:in
`run'
/home/user/site/config/environment.rb:9
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require'
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`require'
/home/user/site/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in
`require'
/home/user/site/vendor/rails/activesupport/lib/active_support/dependencies.rb:521:in
`new_constants_in'
/home/user/site/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in
`require'
/home/user/site/vendor/rails/railties/lib/tasks/misc.rake:4
/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'

Sachant que si j'exécute manuellement :
/home/user/site/$ rake task
cela fonctionne sans problème.

Vous voyez d'où ça peut provenir?

Ma configuration :
rails 2.3.5
rake 0.8.7
rack 1.0.1
ruby 1.8.7

Merci d'avance pour votre aide,

Julien
139b66112d2e2b4efafac2aefed01c2f?d=identicon&s=25 Yann KLIS (Guest)
on 2010-02-04 15:59
(Received via mailing list)
L'utilisateur de la tâche cron est-il bien le même avec lequel tu lances
rake directement ? Ne faut-il pas spécificé le GEM_PATH pour être sûr de
trouver la gem au bon endroit ?

++

yk

Le 4 février 2010 15:50, Julien Lestavel <list-incoming@andreas-s.net> a
écrit :
Be12c49992768913b6992492df54e213?d=identicon&s=25 Etienne Duputel (Guest)
on 2010-02-04 16:01
(Received via mailing list)
Je confirme, dans les cron il faut respécifier le PATH.

2010/2/4 Yann KLIS <yann.klis@gmail.com>
Ee01e594333a9e631173d0d8e4350214?d=identicon&s=25 Didier Did (did)
on 2010-02-04 18:31
(Received via mailing list)
Sinon, je sais pas si cela peut aider mais j'ai utilise un plugin pour
gerer la crontab (taches relatives a un projet rails) sur un mes
projets et ca marche plutot pas mal:
http://github.com/latimes/craken/
021222f0f1f650732fec78ab353547ab?d=identicon&s=25 Julien Lestavel (butterhead)
on 2010-02-04 18:44
Effectivement, le cron n'est pas exécuté par le même utilisateur (le
cron est exécuté par root).

Cependant, je précise le GEM_PATH dans mon crontab :
GEM_PATH=/usr/local/lib/ruby/gems/1.8

Et quand je fais un echo $GEM_PATH en étant connecté à mon nom (donc pas
le même utilisateur que lors du cron), je ne reçois rien, comme si le
GEM_PATH n'était pas initialisé dans ma session.

Je ne comprends donc toujours pas...

Le plugin craken a l'air vraiment bien  : ça semble pas mal de
"railsifier" cet aspect là de l'administration serveur (pour ne rien
perdre au déploiement par exemple). Merci pour le tuyau.

Etienne Duputel wrote:
> Je confirme, dans les cron il faut respécifier le PATH.
>
> 2010/2/4 Yann KLIS <yann.klis@gmail.com>
Ad6ce40f9aa3fb8817b7299baf0f8484?d=identicon&s=25 Florent Florent (Guest)
on 2010-02-04 19:21
(Received via mailing list)
Le 4 février 2010 12:44, Julien Lestavel <list-incoming@andreas-s.net> a
écrit :

> Le plugin craken a l'air vraiment bien  : ça semble pas mal de
> "railsifier" cet aspect là de l'administration serveur (pour ne rien
> perdre au déploiement par exemple). Merci pour le tuyau.
>

Il existe également whenever qui offre une DSL simple à utiliser
http://github.com/javan/whenever

  every 3.hours do
    runner "MyModel.some_process"
    rake "my:rake:task"
    command "/usr/bin/my_great_command"
  end

  every 1.day, :at => '4:30 am' do
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
  end

  every :hour do # Many shortcuts available: :hour, :day, :month, :year,
:reboot
    runner "SomeModel.ladeeda"
  end

  every :sunday, :at => '12pm' do # Use any day of the week or
:weekend, :weekday
    runner "Task.do_something_great"
  end

Cordialement,
Florent
021222f0f1f650732fec78ab353547ab?d=identicon&s=25 Julien Lestavel (butterhead)
on 2010-02-05 14:08
Il fallait que j'installe la version 1.0.1 pour l'utilisateur root (sudo
gem install rack -v=1.0.1) pour que ça marche, car visiblement Rails
2.3.5 n'est pas compatible avec la dernière version de rack (1.1.0,
depuis le 3/1/2010).

Merci pour vos conseils (spécialement pour whenever, je vais le mettre
en place, ça a l'air très pratique)
91eb330fb36d1e03c856574dfb77d2bc?d=identicon&s=25 Thibaut Barrère (thbar)
on 2010-02-06 00:31
(Received via mailing list)
J'aime bien Craken aussi.

Pour le root: tu veux vraiment faire tourner ton cron en root ?
Pourquoi ne pas utiliser le cron de l'utilisateur sous lequel tourne
ton appli ?

-- Thibaut
This topic is locked and can not be replied to.