每当gem没有执行任务时

时间:2013-01-28 20:08:44

标签: ruby-on-rails path crontab whenever whenever-capistrano

我设置了一个rails项目来使用Whenever gem。 现在我使用Capistrano部署我的项目,并将任务很好地添加到crontab列表中。 但是,当我只看到一行时:

/bin/bash: bundle: command not found

所以我在线阅读了几篇文章,所以我在schedule.rb文件上添加了这个文章

env 'PATH', ENV['PATH']

所以你应该认为问题已经解决了,因为这会将下一行添加到crontab:

PATH=/var/rails/alfa_paints/shared/bundle/ruby/1.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

因此,您应该认为bundle在执行命令时位于路径中。但仍然没有运气。 我用一个单独的用户运行命令和部署。因此,为了确保一切都与该用户一起运行,在这种情况下是部署者。我解释了部署者的角色并运行了crontab中指定的命令。执行此命令时没有遇到任何问题。

我的选项已经用完了,并且想知道是否有其他人遇到过这种奇怪的行为?我希望得到一些建议。 这是我的crontab中的输出:

# Begin Whenever generated tasks for: alfa_paints
 PATH=/var/rails/alfa_paints/shared/bundle/ruby/1.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

0 1 * * * /bin/bash -l -c 'cd /var/rails/alfa_paints/releases/20130127192223 && RAILS_ENV=production bundle exec rake alfa:cleanup --silent >> /var/rails/alfa_paints/shared/log/whenever.log 2>&1'

# End Whenever generated tasks for: alfa_paints

任何帮助welkom!

2 个答案:

答案 0 :(得分:1)

您需要在crontab中传递必要的环境变量。

在crontab(crontab -e)

的顶部添加这些行

(显然你会修改变量的值来表示你环境中的那些)

(在这种情况下我使用的是RVM)

PATH = /家庭/部署/ .rvm /宝石/红宝石2.0.0-P247 / bin中:/home/deploy/.rvm/gems/ruby-2.0.0p247@global/bin:/家庭/部署/ .rvm /红宝石/红宝石2.0.0p247 /斌:/home/deploy/.rvm/bin:在/ usr / local / bin目录:在/ usr / bin中:/ bin中:在/ usr /本地/游戏:在/ usr /游戏:的/ usr /斌/:/家庭/部署/ .rvm / bin中

GEM_HOME = /家庭/部署/ .rvm /宝石/红宝石2.0.0-P247

GEM_PATH=/home/deploy/.rvm/gems/ruby-2.0.0-p247/home/deploy/.rvm/gems/ruby-2.0.0-p247@global

MY_RUBY_HOME = /家庭/部署/ .rvm /红宝石/红宝石2.0.0-P247

答案 1 :(得分:1)

你使用的是哪个shell?因为我看到只要在job命令中添加'bash -l -c'。设置

  

set:job_template,nil

或者如果您使用的是zsh,那么

  

set:job_template,“zsh -l -c':job'”

这解决了我的问题