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谢谢!现在我至少有一个解决方法。尽管我可以想象,遇到各种有趣的边缘案例,就像其他人已经在您链接的网站上发表评论一样。 –

相关问题