我应该把我的cronjobs放在铁轨上?

时间:2012-02-19 21:51:16

标签: ruby-on-rails ruby-on-rails-3

铁轨中的cronjobs有特殊的地方吗?我找不到关于这个主题的信息,唯一的例子就是执行Model.some_method

我创建了一个类Crawler,运行了一个方法,并为它尝试了不同的地方(包括app / models),但我一直收到这个错误:

  

$ rails runner -e development'Crawler.run'

     

/usr/local/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:未定义的方法`run'for Crawler:Class(NoMethodError)

from /usr/local/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/commands.rb:64:in `eval'
from /usr/local/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/commands/runner.rb:53
from /usr/local/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/commands.rb:64:in `require'
from /usr/local/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/commands.rb:64
from script/rails:6:in `require'
from script/rails:6
class Crawler
  def run
    puts 'bla'
  end
end

如您所见,它找不到方法'run'。

如果我把它放在/ scripts中我得到这个:uninitialized constant Crawler(NameError),所以这可能不是我想要的。

有什么想法吗?

请注意。我在轨道上3

2 个答案:

答案 0 :(得分:3)

您正在课堂级别调用实例方法。

像这样改写:

class Crawler
  def self.run
    puts 'bla'
  end
end

要回答您的初始问题,没有真正专门的地方,但我通常会在crons下创建一个app文件夹。

关于rake任务,他们应该住在/lib,但这完全取决于你。

答案 1 :(得分:3)

我鼓励您使用whenever gem。它允许您在schedule.rb文件中设置任务,如下所示:

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