Cron的工作不在每当宝石工作

时间:2011-09-25 21:25:40

标签: ruby-on-rails ruby cron whenever

我有一个包含大量任务的应用程序,每天我都想运行一个cron作业,为数据库中的每个Task创建一个DayTask。任务has_many DayTasks和这些daytasks是用户每天将要检查的。我使用随时随地的宝石,但它似乎根本没有运行。有什么想法吗?

配置/ schedule.rb

every 1.day, :at => "12:01am" do
  runner "Task.generate_tasks_for_day"  
end

Task.rb

  def generate_tasks_for_day
    Task.all.each do |task|
      task.day_tasks.create(:target_date => Date.today)
    end 
  end 
运行' when命令'

的结果
1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\'''

注意:每次我想测试运行时,我都在更改config / schedule.rb中的时间。

4 个答案:

答案 0 :(得分:65)

最后,我已经解决了如何运行宝石。 它在生产方面做得很好,但不是在开发模式下(我认为在开发模式下工作得很好,你必须做一些技巧)。

然后,这些是要做的过程:

  1. 安装宝石
  2. 撰写您的scheduler.rb文件
  3. 推送到远程服务器
  4. 登录远程服务器(例如使用ssh
  5. 通过在终端中运行来查看是否有好的上传时间:whenever
  6. 每当crontab运行时更新:whenever --update-crontab
  7. 重新启动服务器crontab(例如在Ubuntu服务器中):sudo service cron restart
  8. 检查crontab是否在服务器上实现良好:crontab -l
  9. 就是这样!

    就个人而言,我更喜欢直接从服务器设置我的crons:

    1. 编辑crontab:crontab -e
    2. 附加我的cron(例如,每天早上5点 - 对于非基于Linux的服务器可能会有所不同):
      0 5 * * * /bin/bash -l -c 'cd /path_to_my_app/current && RAILS_ENV=production bundle exec rake my_cron_rake'
    3. 检查是否实施良好:crontab -l
    4. 完成

答案 1 :(得分:4)

您必须通过运行:

实际使用crontab注册作业

whenever --update-crontab

此外,如果您尝试在本地运行作业,请添加 :environment => "development"到您的任务

runner "MyTask.some_action", :environment => "development"

答案 2 :(得分:0)

尝试直接从终端执行when generated命令或添加以下行 MAILTO=your@emailadress.com 你的crontab。

答案 3 :(得分:0)

如果whenever命令为您提供了-bash: whenever: command not found,请尝试bundle exec whenever