我试图将Whenever gem实现到我的RoR 5应用程序中。每年一次,我希望它在我的“用户”中运行一种方法。模型,但出于测试目的,我每分钟都做一次,如下:
Schedule.rb:
set :output, "/home/ubuntu/workspace/log/cron.log"
every 1.minute do
runner "User.(methodhere)"
end
User.rb:
def (methodhere)
User.all.each do |user|
user.update(remaining_days: user.total_days)
end
end
在多个地方,我读过有时cronjobs在开发模式下无法正常运行,所以我跳过了所有的环节,让我的应用程序进入生产模式,这没有帮助。
然后我发现您可以在命令行中手动运行这些作业,然后我尝试使用找到的命令执行:
whenever --update-cron
然后
crontab -l
显示
# Begin Whenever generated tasks for:
/home/ubuntu/workspace/config/schedule.rb
* * * * * /bin/bash -l -c 'cd /home/ubuntu/workspace && bundle exec bin/rails
runner -e production '\''User.year_days_reset'\'' >>
/home/ubuntu/workspace/log/cron.log 2>&1'
正在运行
/bin/bash -l -c 'cd /home/ubuntu/workspace && bundle exec bin/rails
runner -e production '\''User.(methodhere)'\'' >>
/home/ubuntu/workspace/log/cron.log 2>&1'
在日志中留下了一个错误,如下所示:
Please specify a valid ruby command or the path of a script to run.
Run 'bin/rails runner -h' for help.
undefined method `(methodhere)' for User (call 'User.connection' to
establish a connection):Class
许多谷歌搜索都没有给我留下任何东西。
注意:在rails控制台中手动运行我的方法(methodhere)可以完全按照我的意愿运行。我是RoR的新开发者,所以对此事的任何指导都将不胜感激,谢谢!
编辑:@maxpleaner指出我在User.new。(methodhere)中缺少.new,修复了错误,但是我有一个新问题。我在schedule.rb中的代码似乎没有执行任何操作,因为它应该每分钟发生但它什么都不做。答案 0 :(得分:2)
您必须拥有User类方法
class User
def self.method
...
end
end
通过这种方式,您可以在计划文件中使用User.method。