将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。

链接地址: http://www.djcxy.com/p/14245.html

上一篇: Converting Rails 2 plugin to Rails 3 gem

下一篇: Distribute CouchDB as part of a Rails app?