我有一个包含大量任务的应用程序,每天我都想运行一个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中的时间。
答案 0 :(得分:65)
最后,我已经解决了如何运行宝石。 它在生产方面做得很好,但不是在开发模式下(我认为在开发模式下工作得很好,你必须做一些技巧)。
然后,这些是要做的过程:
scheduler.rb
文件ssh
)whenever
whenever --update-crontab
sudo service cron restart
crontab -l
就是这样!
就个人而言,我更喜欢直接从服务器设置我的crons:
crontab -e
0 5 * * * /bin/bash -l -c 'cd /path_to_my_app/current && RAILS_ENV=production bundle exec rake my_cron_rake'
crontab -l
答案 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