如何在Rails中控制gems vs plugins加载顺序

时间:2009-09-08 18:19:51

标签: ruby-on-rails plugins rubygems

我有一个必须在resource_controller之前加载的插件。原因是Resourcecontroller尝试加载ApplicationController并且它依赖于所述插件(如果尚未加载插件的init.rb,则无法加载)。

问题是ResourceController来自gem而不是插件。

有没有办法在 gems之前加载插件(来自environment.rb的“config.gem ...”)?

3 个答案:

答案 0 :(得分:2)

如果您完全依赖config.gem来加载插件,那么在Gems之前没有现有方法可以加载插件,但这并不意味着您无法将resource_controller gem加载到您自己的手中。

作为一个非常残酷的解决方案,您可以移除相关的config.gem行,然后在require的底部明确地“environment.rb”。

答案 1 :(得分:1)

对于environment.rb中的rails2.3x,将gem设置为lib => false然后在after_initialize块中需要gem

config.gem 'some_gem', :lib => false
config.after_initialize do
  require 'some_gem'
end

那就行了。

答案 2 :(得分:0)

快速浏览一下Initializer.rb代码显示:

  load_gems
  load_plugins

  # pick up any gems that plugins depend on
  add_gem_load_paths
  load_gems
  check_gem_dependencies

如果我理解正确,宝石总是在插件之前出现...然后插件需要的一些宝石。

为什么不将resource_controller用作插件呢? 只是不要使用“config.gem ...”并将其放在插件目录中。