Rails Вызывает грабли, зависящие от: задачи среды, из файла инициализатора - PullRequest
0 голосов
/ 05 февраля 2011

Я использую планировщик rufus для замены заданий cron из системы развертывания и запуска этих заданий при загрузке приложения при развертывании.

Теперь у меня есть этот scheduler.rb, помещенный в config /Каталог initializers из корневого каталога приложения.

Содержимое файла scheduler.rb выглядит следующим образом:

require 'rufus/scheduler'
require 'rubygems'
require 'rake'

load File.join(RAILS_ROOT,'lib','tasks','tempfile.rake')

temp_files_cleaning_scheduler = Rufus::Scheduler.start_new

temp_files_cleaning_scheduler.cron '*/1 * * * *' do
    Rake::Task["tempfile:delete_all"].reenable
    Rake::Task["tempfile:delete_all"].invoke
end

Теперь, когда я запускаю сервер приложений, я получаю сообщение об ошибке, как показано ниже:

scheduler caught exception :
Don't know how to build task 'environment'
/home/karthik/.rvm/gems/jruby-1.5.2/gems/rake-0.8.7/lib/rake.rb:1728:in `[]'
/home/karthik/.rvm/gems/jruby-1.5.2/gems/rake-0.8.7/lib/rake.rb:605:in `invoke_prerequisites'

где 'environment' - это зависимая задача для задачи "tempfile: delete_all", которую я вызываю.И это: задача среды определена в railties / lib / tasks / misc.rake.

Я не хочу загружать этот файл misc.file путем жесткого кодирования пути к нему. Есть ли более чистый способ решения этой проблемы?

Спасибо.

1 Ответ

1 голос
/ 05 февраля 2011

Похоже, вам нужно больше определений в Rakefiles, которые не загружаются, возможно потому, что в "lib / tasks / tempfile.rake" нет операторов require.

Я предполагаю, что это работает из командной строки, и если это так, у вас есть две опции:

  1. Загрузить основной Rakefile вашего приложения, который имеет все необходимое, включая:

    load File.join(RAILS_ROOT,'lib','tasks','tempfile.rake')

  2. Просто позвоните, как будто из консоли:

    system('rake tempfile:delete_all')

Надеюсь, это поможет!

...