我正在编写一个ruby调度程序 - 即rufus-scheduler,我需要在config文件夹中的initializers部分写入命令,每隔1分钟执行一次任务。我试图从这个模块中访问一个方法。所以我的代码看起来像
scheduler.every("1m") do
puts("HELLO #{Time.now}")
ModelName.methodname("WHAT ARE YOU DOING")
end
这在某种程度上不会在模型中执行必要的操作。我也不确定这是否是正确的做事方式 - 例如在配置文件中调用模型。有没有更好的地方将此代码放入模型中?或者在配置文件中调用模型是完美的好习惯。我查看了互联网,看到红宝石中不同类型文件的使用,但找不到合适的材料。任何帮助或指导表示赞赏。
答案 0 :(得分:2)
如果要从独立任务访问模型,最好的方法是使用rails runner
包装器。例如,您将脚本称为:
rails runner call_model.rb
这将在Rails环境中加载,然后执行您的脚本,无需自己执行此操作。模型本身不起作用,因为它们缺乏Rails的上下文。
如果这还不够,您可能需要通过将config/environment.rb
包含在rufus-scheduler配置中来更直接地加载Rails环境。
答案 1 :(得分:1)
听起来你真的想要某种真实的预定动作。配置文件用于配置,而不是用于那种实际工作代码。
有吨在rails中运行计划任务的方法。
google“rails daemons”或“rails scheduled tasks”让你开始。
以下是使用cron的计划任务最佳实践的良好列表: A cron job for rails: best practices?