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

Gra*_*man 17 ruby cron ruby-on-rails whenever

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

配置/ schedule.rb

every 1.day, :at => "12:01am" do
  runner "Task.generate_tasks_for_day"  
end
Run Code Online (Sandbox Code Playgroud)

Task.rb

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

运行'when命令'的结果

1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\'''
Run Code Online (Sandbox Code Playgroud)

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

dam*_*ser 67

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

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

  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点 - 对于非基于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. 完成

  • 谢谢!我一开始并不太了解它是如何工作的.我期待更多的魔法;) (3认同)
  • 我不明白为什么sidekiq或每当提到`when --update-crontab`时 (2认同)
  • 我猜你的问题@Cyzanfar 与这个问题并不严格相关。无论如何,我猜您是忘记导入或错误安装了 ```whenever``` 二进制文件 - 请检查 ```whichevery``` 的结果。你在另一个用户上运行这个吗?该用户有更正权限吗?如果问题仍然存在,建议您搜索类似问题或打开一个新问题。 (2认同)

Gra*_*m T 6

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

whenever --update-crontab

另外,如果您要使作业在本地运行,请添加 :environment => "development"到任务中

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