Доступ к методу класса из модели в Rakefile / Ruby on Rails 3 - PullRequest
1 голос
/ 16 января 2011

У меня есть модель, назовем ее Foobar. Я хочу иметь возможность запускать задание cron для обновления атрибута всех объектов, которые являются экземплярами Foobar. Итак, в псевдокоде это может выглядеть примерно так:

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

Теперь, допустим, я обернул это в метод класса Foobar.run_update ().

Вызов Foobar.run_update () будет работать нормально из контроллера или даже из представления. Но я хочу запустить run_update () из файла Rakefile, чтобы я мог связать его с запуском cron. Но класс Foobar недоступен для Rake, когда он вызывается из crontab.

Как я могу решить это? Как я могу получить доступ к методам класса Foobars из Rake, когда Rake вызывается из cron?

Большое спасибо за вашу помощь.

Ответы [ 3 ]

11 голосов
/ 16 января 2011

По рейку, если вы имеете в виду задачу rake, то добавление => :environment загружает среду rails для этой задачи, и вы сможете вызывать там метод Foobar.run_update. Как,

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

И у вас должна быть возможность вызывать rake foobar:update из консоли и запланировать ее как cronjob.

1 голос
/ 16 января 2011

Вы можете загрузить среду Rails, запросив config / environment.rb :

ENV["RAILS_ENV"] ||= "production"
require '/where/your/rails/project/is/config/environment.rb'
0 голосов
/ 16 января 2011

В моих приложениях Sinatra у меня обычно есть файл models/init.rb, который требует Sequel, устанавливает соединение с БД, а затем использует require_relative для запроса всех файлов моей модели.Затем мое основное приложение выполняет require_relative "models/init".

. При такой настройке любой другой скрипт (включая IRB) все, что мне нужно сделать, - это сам потребовать файл models/init.rb, и у меня полный доступ к тем же моделям и БДсоединение, которое имеет приложение.

...