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

发布于 2024-10-12 12:53:43 字数 475 浏览 3 评论 0原文

我有一个模型,我们称之为 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 调用时,Rake 无法使用 Foobar 类。

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

非常感谢您的帮助。

I have a model, let's call it Foobar. I want to be able to run a cron job to update an attribute of all objects that are instances of Foobar. So, in pseudocode, it might be something like this:

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

Now, let's say I wrap that in a class method called Foobar.run_update().

Calling Foobar.run_update() would work fine from the controller, or even from a view. But, what I want to do is run run_update() from the Rakefile so that I can tie it into a cron run. But, the Foobar class is not available to Rake when it is called from crontab.

How can I resolve that? How can I access the class methods of Foobars from Rake, when Rake is called from cron?

Thank you very much for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泪是无色的血 2024-10-19 12:53:43

通过 rake,如果您指的是 rake 任务,则添加 =>; :environment 加载任务的 Rails 环境,您可以在那里调用 Foobar.run_update 方法。就像,

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

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

By rake, if you mean a rake task then adding => :environment loads the rails environment for the task and you be able to call the Foobar.run_update method there. Like,

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

And you should just be able to call rake foobar:update from the console and have it scheduled as a cronjob.

娜些时光,永不杰束 2024-10-19 12:53:43

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

ENV["RAILS_ENV"] ||= "production"
require '/where/your/rails/project/is/config/environment.rb'

You can load up the Rails environment by requiring config/environment.rb:

ENV["RAILS_ENV"] ||= "production"
require '/where/your/rails/project/is/config/environment.rb'
温折酒 2024-10-19 12:53:43

在我的 Sinatra 应用程序中,我通常有一个文件 models/init.rb ,它需要 Sequel,设置我的数据库连接,然后使用 require_relative 来请求我的所有模型文件。然后,我的主应用程序执行 require_relative "models/init"

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

In my Sinatra apps I typically have the file models/init.rb which requires Sequel, sets up my DB connection, and then uses require_relative to require all my model files. My main application then does require_relative "models/init".

With this setup any other script (including IRB) all I have to do is require the models/init.rb file myself, and I have full access to the same models and DB connection that the application has.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文