将Rails 2插件转换为Rails 3 gem
因此,我已经习惯在我的Rails 2项目中使用这个伟大的插件,名为Bootstrapper。 它基本上重复了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
自动加载路径实际上具有以下文件系统路径的烦人特征。 例如在你的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
的默认值(注释掉)。 要切换,你只需自动装载extras而不是lib。