我可以在Rails中使用带有模块方法的Genever Gem

时间:2016-04-18 13:39:17

标签: ruby-on-rails ruby whenever

我在rails中创建了一个非常小的应用程序,我在/ lib中创建了一个模块方法来处理逻辑。

我还设置了每当在设定的时间运行该模块方法时。我已经跟踪了readme from Whenever和这些previous posts,希望能够正确设置。

在查看自述文件时虽然引用的例子如下:

every 3.hours do
  runner "MyModel.some_process"
  rake "my:rake:task"
  command "/usr/bin/my_great_command"
end

every 1.day, :at => '4:30 am' do
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
  runner "SomeModel.ladeeda"
end

因此,我的问题是什么时候必须引用模型中的方法?或者它可以引用/ lib中的模块方法? Looking at this post似乎暗示必须在模型中使用该方法。

我的问题是我没有数据库,所以没有模型。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

它可以引用任何类或任何模块中的方法。 (模块只是一个无法实例化的类)。

如果您需要在模块中的方法之间传递一些中间数据,有时会使模块成为PORO(普通的旧Ruby对象)类,这样可以实例化(即使用newinitialize方法)您可以将值存储在该对象的所有实例方法可用的attr_accessor属性中。

答案 1 :(得分:0)

您不必仅在模型上调用方法。就您当前范围内的类/模块可用/可访问而言,您可以调用它。由于runner可以访问模型,因此您可能已经设置了随时可以加载rails app的gem。这意味着它也可以访问/lib文件夹中的任何类/模块。

所以,请继续随时打电话给你:

every 3.hours do
  runner "YourModule.some_method"
end

如果您没有使用任何Rails特定功能,我建议不要加载Rails环境。您可以节省大量资源,并且执行速度更快。

或者,创建一个rake任务来执行处理并调用该任务。作为一个好处,您最终会得到一个可以调用并自行测试的rake任务。

every 3.hours do
  rake "cron:my_process"
end