启动过程在rails中需要相当长的时间。大部分时间是由于加载gem依赖项。如果你想在每个请求上做到这一点,那么有一些方法可以像这里描述的那样:
由于初始化程序仅在初始化期间运行,因此rails不会重新运行它们。如果你依靠猴子修补,有这里描述的方法
Redmine插件通常不是Ruby宝石,而是存在于主Rails应用程序内的文件夹中。
只要插件作者遵循一些Rails最佳实践,Rails的自动加载应该(并且将会)与Redmine插件一起使用。要注意的基本事项是:
Foo::Bar::Baz
lib/foo/bar/baz.rb
如果插件作者遵循这些规则,插件的代码很可能会自动加载并重新加载就好了。一个例外是插件 init.rb ,但这通常不会在插件开发过程中经常发生变化。
init.rb
实际上,由于违反了这些规则,许多Redmine插件会破坏自动加载。尝试重新加载时,症状可能不是自动重新加载,甚至是应用程序错误,导致应用程序在生产模式下正常工作,但在开发模式下第一次成功请求后失败。
通常只需重新组织插件代码以匹配Rails的期望并删除require语句就可以解决这类问题。
更改插件声明的路由将需要重新启动服务器,我不知道如何使用Redmine自动重新加载这些路由。
您可能从Redmine插件的init.rb文件中加载补丁。 用它们包围它们是一个很好的做法:
ActionDispatch :: Reloader.to_prepare
使用此回调,将在开发模式下的每个请求之前重新应用修补程序。
这是一个例子:
require 'redmine' ActionDispatch::Reloader.to_prepare do require_dependency 'redmine_multiprojects_issue/issue_patch' require_dependency 'redmine_multiprojects_issue/issues_helper_patch' require_dependency 'redmine_multiprojects_issue/issues_controller_patch' end Redmine::Plugin.register :redmine_multiprojects_issue do ... end
请注意,如果更改路由,则仍需要重新启动服务器。