2007 年 3 月 2 日,星期五

插件加载内部已得到改进!

作者:marcel

到目前为止,将插件定位并加载到您的应用程序中的任务一直由 Rails::Initializer 的几个私有方法处理。
这些方法相当大,粒度粗糙,因此很难在不依赖易于损坏的复制粘贴的情况下进行挂钩,如果您想自定义插件的加载方式。
这些方法相当大,粒度粗糙,因此很难在不依赖易于损坏的复制粘贴的情况下进行挂钩,如果您想自定义插件的加载方式。

Edge Rails 中的一项新功能(changeset 6277)用两个新的内部类 Rails::Plugin::Locater 和 Rails::Plugin::Loader 替换了这些零散的方法。如果您需要挂钩到插件的加载方式,您可以定义 Rails::Plugin::Loader 的子类,然后使用新的plugin_loader配置选项在您的config/environement.rb:


  Rails::Initializer.run do |config|
    # Config settings...
    config.plugin_loader = PluginLoaderWithDependencies
  end

中进行注册,以使其成为处理插件加载的类。这应该使插件系统之上的扩展(例如 Revolution Health 团队开发的 Plugems 方法)更容易实现和维护。

对于那些对 Rails 的插件加载子系统进行猴子补丁的人来说,这引入了插件定位和加载方式的重大变化。短期内,这可能意味着您对内部的自定义很可能会失败,但好消息是,从长远来看,新的实现将更容易自定义。

对于那些居住在 Rails Edge 的勇敢的早期采用者,请对您的应用程序进行测试运行,以确保这些更改
不会给您带来任何问题。一如既往,欢迎报告错误和提交补丁:http://dev.rubyonrails.org/