22

我有一个包含一堆任务的应用程序,每天我都想运行一个 cron 作业,为数据库中的每个任务创建一个 DayTask。任务 has_many DayTasks 和这些 daytasks 是用户每天要检查的内容。我正在使用when gem,但它似乎根本没有运行。有任何想法吗?

配置/时间表.rb

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

任务.rb

  def generate_tasks_for_day
    Task.all.each do |task|
      task.day_tasks.create(:target_date => Date.today)
    end 
  end 

运行“无论何时命令”的结果

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

4 回答 4

74

最后,我解决了如何运行 gem 的问题。它在生产中运行良好,但在开发模式下却不行(我认为要在开发模式下运行良好,您必须做一些技巧)。

然后,这些是要执行的过程:

  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

就是这样!

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

  1. 编辑 crontab:crontab -e
  2. 附加我的 cron (例如,每天早上 5:00 - 对于不基于 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. 完毕
于 2012-11-06T19:11:50.337 回答
8

您必须通过运行以下命令实际使用 crontab 注册作业:

whenever --update-crontab

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

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

于 2016-01-18T21:46:14.307 回答
0

尝试直接从终端执行每次生成的命令或将以下行添加 MAILTO=your@emailadress.com 到您的 crontab。

于 2011-09-25T22:29:37.877 回答
0

如果whenever命令给你-bash: whenever: command not found,试试bundle exec whenever

于 2020-03-24T15:50:34.950 回答