Ruby on rails 如何升级Rails(引擎)插件?

Ruby on rails 如何升级Rails(引擎)插件?,ruby-on-rails,rubygems,Ruby On Rails,Rubygems,我有一个可以用来制作宝石的工具。但是当我在Rails环境(或erb)中需要它时,插件中的模型不会被加载。我已经学习了很多教程,并且阅读了关于这个主题的所有内容 # environment.rb config.gem 'myengine' # in irb require 'myengine' 我已经解包了gem并验证了所有文件都存在。My init.rb已被移动到名为“rails”的新文件夹中。“lib”中的所有文件都会自动添加到$LOAD_路径,因此需要“myengine”运行lib/my

我有一个可以用来制作宝石的工具。但是当我在Rails环境(或erb)中需要它时,插件中的模型不会被加载。我已经学习了很多教程,并且阅读了关于这个主题的所有内容

# environment.rb
config.gem 'myengine'

# in irb
require 'myengine'
我已经解包了gem并验证了所有文件都存在。My init.rb已被移动到名为“rails”的新文件夹中。“lib”中的所有文件都会自动添加到$LOAD_路径,因此
需要“myengine”
运行
lib/myengine.rb
。我通过将一个
放入“hello”
来验证这一点

是因为在一个已知的地方存在插件,Rails可以将所有的模型、控制器等添加到相关的加载路径中吗?在使用gem时是否需要手动复制

gemspec是一种添加lib以外的其他路径的方法吗?然而,我假设Rails不仅仅需要每个文件,而是根据需要加载它们,因此需要文件名和类名匹配|
%w{ models controllers helpers }.each do |dir|
  path = File.join(File.dirname(__FILE__), 'app', dir) + '/'

  $LOAD_PATH << path

  puts 'requiring'
  Dir.new(path).entries.each do |file|
    if file =~ /\.rb/
      puts file
      require file
    end
  end
end
path=File.join(File.dirname(_File__),'app',dir)+'/'
$LOAD_PATH我要说的是,关于将这些目录添加到搜索路径的部分是正确的。您不需要做的是手动要求每个文件(正如您在最后一句中提到的)。当您引用一个不存在的常量时,Rails所做的是在加载路径中搜索具有相同名称(当然带下划线)的文件


如果出于某种原因,您不能遵守约束(仔细考虑),那么您需要深入研究Rails,看看重新加载机制是如何工作的,这样您就可以在开发模式下正确地绑定到它。

问题在于文件(在应用程序中)因为使用Jeweler时,它只会自动将文件添加到提交到git的
必需路径中。

仅添加搜索路径似乎不起作用。这可能与重新加载类的问题有关——我将尝试进一步的实验。也许我需要在每次请求时重新加载插件。。。