2015-05-22 4 views
3

Я хочу выполнить две задачи рейка, которые инициализируют мою базу данных при запуске сервера. Поэтому я поместил следующий код в config/application.rb:Rails - выполнить задачу рейка при инициализации

config.after_initialize do 
     Rake::Task[ 'download_csv:get_files' ].invoke 
     Rake::Task[ 'download_csv:place_in_database' ].invoke 
end 

Однако, я получаю следующее сообщение об ошибке:

.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task_manager.rb:62:in `[]': Don't know how to build task 'download_csv:get_files' (RuntimeError) 

Что я неправильно делаю? (Моя цель - инициализировать базу данных при запуске).

+0

показать имена файлов рейка ....... Я уверен, что вы сделали расширения файлов рейка как '.rb' .. измените их на' .rake' .. Это будет работать. –

+0

Вставить вывод из 'rake -T download_csv' –

+0

Arup имена файлов: 'download_csv.rake', 'query_api.rake'. Павела нет выхода. – octavian

ответ

1

download_csv:place_in_database подразумевает, что в пространстве имен есть place_in_databasedownload_csv. Так выглядит ваша задача Rake? Было бы намного легче диагностировать проблему, если бы вы опубликовали код.

Кроме того, убедитесь, что ваши файлы .rake находятся в lib/tasks.

5

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

config.after_initialize do 
    Rails.application.load_tasks # <--- 
    Rake::Task['download_csv:get_files'].invoke 
    Rake::Task['download_csv:place_in_database'].invoke 
end 

Обратите внимание, что #load_tasks не хранит состояние, и если вы вызываете его где-то еще вы можете испытывать проблемы.

С другой стороны, имена задач предполагают, что их не нужно запускать на каждом веб-экземпляре (например, Heroku Dynos); но они будут работать на каждой машине, используя вышеприведенную стратегию. Поэтому, если вы масштабировали свои веб-экземпляры (работая на нескольких компьютерах), выполнение этих задач в одном экземпляре (одноразовый Dyno на Heroku) в качестве автоматизированной задачи после развертывания было бы более эффективным.

Смежные вопросы