2015-05-22 29 views
3

我想在服務器啓動時執行兩個初始化我的數據庫的rake任務。 因此,我放在config/application.rb下面的代碼:Rails - 在初始化時執行rake任務

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

顯示rake文件名.......我確定你把rake文件擴展名改爲'.rb' ..把它們改成'.rake' ..它會工作.. –

+0

粘貼輸出'rake -T download_csv' –

+0

奧雅納的文件名是'download_csv.rake','query_api.rake'。帕維爾沒有輸出。 – octavian

回答

1

download_csv:place_in_database意味着在命名空間download_csv內有一個名爲place_in_database的任務。這是你的Rake任務的樣子嗎?如果您發佈代碼,將會更容易診斷問題。

此外,請確保您的.rake文件駐留在lib/tasks

5

Rails的任務不會自動加載,你需要先加載它們:

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不存儲狀態,如果再次調用它在其他地方,你可以遇到問題。另一方面,這些任務的名稱表明它們不需要在每個Web實例上運行(例如Heroku Dynos);但是,這些任務的名稱不需要在每個Web實例上運行(例如Heroku Dynos)。但是他們會使用上述策略在每臺機器上運行。因此,如果您已經擴展了web實例(在多臺計算機上運行您的應用),那麼將這些任務作爲自動部署後任務在單個實例(一次性Heroku上的Dyno)上運行將會更加有效。

相關問題