所以我在这个名为Bootstrapper的Rails 2项目中习惯使用这个很棒的插件。它基本上复制了seeds.rb文件的功能,但我喜欢它,因为它可以让你将引导过程分解为简洁的块。
无论如何,我已经走到了分叉项目并尝试将其变成Rails 3的宝石。我已经能够让gem初始化并注册rake任务和生成器了。但是,我遇到了Bootstrapper类本身的问题。除非它在模块中,否则它不会加载到Rails项目中。
也就是说,如果我将Bootstrapper类本身放在一个文件中并在我的Railtie中需要该文件,那么在我的Rails应用程序中,它找不到Bootstrapper类。如果我把这个类放在一个模块中并调用Bootstrapper :: Bootstrapper,那么一切都很好。
实际需要Bootstrapper类的代码是:
ActiveSupport.on_load :active_record do
require 'bootstrapper/bootstrapper'
end
来源可在此处获得: http://github.com/jrmehle/bootstrapper/tree/make_gem
答案 0 :(得分:0)
自动加载路径实际上具有以下文件系统路径的烦人功能。例如,在您的lib或extras中(取决于您自动加载的内容),您可能具有以下文件结构:
lib/bootstrapper/bootstrapper.rb
# in this case, Bootstrapper::Bootstrapper.class = Class in rails c
# ie: you don't get a NameError exception
更具体地说,
lib/bootstrappers/bootstrapper.rb
# Bootstrapper::Bootstrapper => NameError
# Bootstrappers::Bootstrapper => works
如果你真的想要另一种方式,你可以把所有东西都移到你的lib / bootstrapper.rb源文件中,但是,我不喜欢这样做,那不是宝石的组织方式。在rails3中,一旦你在任何地方使用模块,你会发现自动加载相当不错(这可能很痛苦)。
Rails3使用/ extras而不是/ lib但它不是必需的,它只是来自rails new
的默认值(注释掉)。要切换,您只需自动加载额外内容而不是lib。