簡體   English   中英

Rails - 在初始化時執行rake任務

[英]Rails - execute rake task at initialization

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

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)

我做錯了什么? (我的目標是在啟動時初始化數據庫)。

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實例(在多台計算機上運行您的應用程序),則在單個實例(Hero上的一次性Dyno)上運行這些任務作為自動化的部署后任務會更有效。

download_csv:place_in_database表示命名空間download_csv有一個名為place_in_database的任務。 這是你的Rake任務的樣子嗎? 如果您發布代碼,將更容易診斷問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM