Ruby on rails 从Rakefile/RubyonRails 3中的模型访问类方法

Ruby on rails 从Rakefile/RubyonRails 3中的模型访问类方法,ruby-on-rails,ruby,ruby-on-rails-3,rake,rakefile,Ruby On Rails,Ruby,Ruby On Rails 3,Rake,Rakefile,我有一个模型,我们叫它Foobar。我希望能够运行cron作业来更新作为Foobar实例的所有对象的属性。所以,在伪代码中,可能是这样的: Foobar.all.each do |foobar| foobar.update_attributes({:my_attribute => 'updated'}); end 现在,假设我将其包装在一个名为Foobar.run\u update的类方法中 从控制器甚至从视图调用Foobar.run_update都可以正常工作。但是,我想做的是从R

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

Foobar.all.each do |foobar|
  foobar.update_attributes({:my_attribute => 'updated'});
end
现在,假设我将其包装在一个名为Foobar.run\u update的类方法中

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

我如何解决这个问题?当从cron调用Rake时,如何从Rake访问foobar的类方法


非常感谢您的帮助。

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


您可以通过要求config/environment.rb加载Rails环境:


在我的Sinatra应用程序中,我通常有文件models/init.rb,它需要Sequel,设置我的DB连接,然后使用require_relative来require我的所有模型文件。然后,我的主应用程序确实需要_relative models/init


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

在我的Sinatra应用程序中,我通常拥有需要Sequel的models/init.rb文件,设置我的DB连接,然后使用require_relative来require我的所有模型文件。然后,我的主应用程序确实需要_relative models/init


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

By rake,如果您指的是一个rake任务,那么adding=>:environment将为该任务加载rails环境,您可以在那里调用Foobar.run\u update方法。像

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

您应该能够从控制台调用rake foobar:update,并将其作为cronjob进行调度。

如果您指的是rake任务,那么adding=>:environment为该任务加载rails环境,您可以在那里调用foobar.run\u update方法。像

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

您应该能够从控制台调用rake foobar:update,并将其作为cronjob进行调度。

您所说的rake是指rake任务,对吗?如果您接受投票率最高的答案,您的声誉将提高两倍!:OBy rake你的意思是rake任务,对吗?如果你接受投票率最高的答案,你的声誉将提高三倍O