1

我有一个模型,我们称之为 Foobar。我希望能够运行 cron 作业来更新作为 Foobar 实例的所有对象的属性。所以,在伪代码中,它可能是这样的:

Foobar.all.each do |foobar|
  foobar.update_attributes({:my_attribute => 'updated'});
end

现在,假设我将它包装在一个名为 Foobar.run_update() 的类方法中。

调用 Foobar.run_update() 从控制器甚至视图都可以正常工作。但是,我想做的是从 Rakefile 运行 run_update() 以便我可以将它绑定到 cron 运行中。但是,当从 crontab 调用 Foobar 类时,它对 Rake 不可用。

我该如何解决?当从 cron 调用 Rake 时,如何从 Rake 访问 Foobars 的类方法?

非常感谢您的帮助。

4

3 回答 3

11

通过 rake,如果您的意思是 rake 任务,那么添加=> :environment会为该任务加载 rails 环境,您就可以在Foobar.run_update那里调用该方法。像,

namespace :foobar do
  task :update => :environment do
    Foobar.run_update
  end
end 

而且您应该能够rake foobar:update从控制台调用并将其安排为 cronjob。

于 2011-01-16T04:25:36.417 回答
1

你可以通过config/environment.rb来加载 Rails环境:

ENV["RAILS_ENV"] ||= "production"
require '/where/your/rails/project/is/config/environment.rb'
于 2011-01-16T04:14:43.913 回答
0

在我的 Sinatra 应用程序中,我通常有models/init.rb需要 Sequel 的文件,设置我的数据库连接,然后用于require_relative需要我的所有模型文件。我的主要应用程序然后require_relative "models/init"

使用此设置,任何其他脚本(包括 IRB)我所要做的就是models/init.rb自己需要该文件,并且我可以完全访问应用程序具有的相同模型和数据库连接。

于 2011-01-16T04:17:42.233 回答