Ruby on rails 如何在plugin init.rb中正确实例化模型?

Ruby on rails 如何在plugin init.rb中正确实例化模型?,ruby-on-rails,ruby-on-rails-4,rails-activerecord,redmine,redmine-plugins,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,Redmine,Redmine Plugins,如何正确初始化需要实例化插件本身中定义的模型(读取数据库记录)的Redmine插件 例如,我有一个插件myredmine\uplugin,它附带了一个模型MyPluginModel。关于插件初始化,我想 从数据库中读取MyPluginModel的记录 使用记录运行一些初始化代码 给定以下代码: require 'redmine' Redmine::Plugin.register :my_redmine_plugin do name 'My Redmine Plugin' # ..

如何正确初始化需要实例化插件本身中定义的模型(读取数据库记录)的Redmine插件

例如,我有一个插件
myredmine\uplugin
,它附带了一个模型
MyPluginModel
。关于插件初始化,我想

  • 从数据库中读取
    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
在迁移之前,似乎要运行
来准备

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

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

当我在迁移过程中注释掉
to_prepare
块时,一切正常。有什么方法可以检测迁移过程吗?

尝试在初始化后使用
而不是
来准备
。这不是Redmine问题-Rails初始化过程有不同的钩子,它们在启动过程中的不同时间运行。有关更多信息,请参阅


更新:考虑到这一点,这可能对迁移仍然没有帮助-您可以从钩子中的错误中解救出来。

当简单地捕获异常时,我仍然需要找到一种方法来检测它是否是在迁移(忽略它)或生产(带错误退出)期间引起的。这让我们回到我最初的问题:如何检测迁移?@MichaelKrupp-see@bbozo谢谢!现在我至少有了一个解决办法。尽管我可以想象,在你链接的网站上,我遇到了各种各样有趣的边缘案例,正如其他一些人已经评论过的那样。