6

如何正確初始化需要實例化插件本身定義的模型(讀取數據庫記錄)的Redmine插件?如何在插件init.rb中正確實例化模型?

例如,我有一個插件my_redmine_plugin,它帶有一個型號MyPluginModel。在插件初始化之後,我想

  • 從DB
  • 讀的 MyPluginModel記錄
  • 運行與記錄

考慮下面的代碼一些初始化代碼:

require 'redmine' 

Redmine::Plugin.register :my_redmine_plugin do 
    name 'My Redmine Plugin' 

    # ...  
end 

Rails.configuration.to_prepare do 
    m = MyPluginModel.find(1) 
    run_some_init_code(m) 
end 

它看起來像遷移之前運行to_prepare

$ bundle exec rake redmine:plugins:migrate NAME=my_redmine_plugin 

`table_structure': Could not find table 'mypluginmodel' (ActiveRecord::StatementInvalid) 
... 

當我在遷移過程中註釋掉to_prepare塊時,一切正常。有什麼方法可以檢測遷移過程嗎?

回答

0

嘗試使用after_initialize而不是to_prepare。這不是一個Redmine問題 - Rails初始化過程有不同的掛鉤,它們在啓動過程中的不同時間運行。有關更多信息,請參閱the API docs

更新:思考它可能仍然沒有幫助遷移 - 你可以從你的鉤子的錯誤救援。

+0

當簡單地捕捉異常時,我仍然必須找到一種方法來檢測它是在遷移(忽略它)還是生產(出錯並出錯)時引起的。這讓我們回到我的最初的問題:如何檢測遷移? –

+1

@MichaelKrupp請參閱https://stackoverflow.com/questions/1858230/how-to-detect-whether-my-rails-is-running-in-migration-or-not-in-environment-rb – bbozo

+0

@bbozo謝謝!現在我至少有一個解決方法。儘管我可以想象,遇到各種有趣的邊緣案例,就像其他人已經在您鏈接的網站上發表評論一樣。 –

相關問題