6

Wie initialisieren Sie Redmine-Plugins, die ein im Plugin definiertes Modell (lesen Sie einen Datenbankeintrag) instanziieren müssen?Wie man ein Modell im Plugin init.rb korrekt instanziiert?

Zum Beispiel habe ich ein Plugin my_redmine_plugin, die mit einem Modell MyPluginModel kommt. Auf Plugin-Initialisierung, würde ich gelesen

mag
  • einen Rekord von MyPluginModel von DB
  • laufen einige Initialisierungscode mit dem Datensatz

der folgende Code Gegeben:

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 

Es sieht so aus, als ob to_prepare vor der Migration ausgeführt wird:

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

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

Wenn ich während der Migration den Block to_prepare auskommentiere, funktioniert alles einwandfrei. Gibt es eine Möglichkeit, den Migrationsprozess zu erkennen?

Antwort

0

Verwenden Sie after_initialize anstelle von to_prepare. Dies ist kein Redmine-Problem - der Rails-Initialisierungsprozess hat verschiedene Hooks, die während des Starts zu unterschiedlichen Zeiten ausgeführt werden. Weitere Informationen finden Sie unter the API docs.

Update: darüber nachzudenken, dies könnte immer noch nicht mit der Migration helfen - Sie könnten nur von diesem Fehler in Ihrem Haken zu retten.

+0

Wenn ich die Exception einfach abfange, müsste ich immer noch einen Weg finden, um zu erkennen, ob es während der Migration (ignorieren) oder der Produktion (Beenden mit Fehler) verursacht wurde. Was uns zurück zu meiner anfänglichen Frage bringt: Wie kann man Migration erkennen? –

+1

@MichaelKrupp siehe https://StackOverflow.com/Questions/1858230/How-to-detect-Whether-my-Rails-is-running-in-migration-o-not-in-environment-rb – bbozo

+0

@bbozo danke ! Jetzt habe ich zumindest einen Workaround. Obwohl ich mir vorstellen könnte, dass ich in alle möglichen lustigen Randfälle geraten könnte, da einige andere Leute bereits auf der verlinkten Seite kommentiert haben. –

Verwandte Themen