我正在为Rails创建一个引擎作为插件。我希望它能够在加载时对Rails的配置进行必要的更改,以便它可以指定其Gem依赖关系以及添加一些加载路径。
插件的init.rb文件可以访问配置对象,但这实际上是只读的,您可以指定一个gem,但它没有区别,初始化程序必须已经在此时运行。
我现在已经解决了这个问题,需要一个带有新Rails :: Initializer块的文件,如下所示:
Rails::Initializer.run do |config|
config.gem "authlogic", :version => ">= 2.0.9"
# etc
end
这样可以消除主应用程序环境中的任何现有配置.rb。
也许我可以通过在引擎中添加一个生成器来解决这个问题,这个生成器可以在环境中添加一些东西,在正确的阶段加载插件的配置,或者可能有一种方法可以为配置/初始化程序添加一个文件来完成这项工作。不知道如何最好地解决这个问题。
答案 0 :(得分:1)
我会使用config / initializers路由。这是放置插件特定配置代码的标准文件夹,它将在正确的时间加载。
为了实现,我会尽我所能为所有允许我没有配置文件的内容选择合理的默认值。 (我知道这并非总是可行。)
接下来我将使用插件创建一个生成器,它将使用以下命令在config / initializers中自动创建配置文件:
./script/generate plugin MyPlugin --with-generator
最后,我会在插件的install.rb中添加一些内容,以便在安装插件时运行生成器脚本。这样,配置文件就会随着安装自动生成,如果用户想要恢复默认配置,用户仍然可以轻松地重新生成。
答案 1 :(得分:1)
您确定要将其作为插件而不是宝石分发吗?如果将引擎打包为gem,则可以将gem依赖项指定为gem构建过程的一部分。例如,如果您使用珠宝商创建宝石,则只需添加一行:
s.add_dependency'authlogic'
安装gem后,将确保安装所有依赖项。一个完整的珠宝商配置示例谷歌'珠宝商宝石依赖'。
另外,我在自己的rails引擎上做了很多工作,最近提取了很多有用的基本功能。您可能会发现这对其他引擎问题很有帮助:
http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/
答案 2 :(得分:0)
您可以轻松地将此行添加到init.rb(在插件目录下)
config.gem 'quick_magick'
我用rails 2.3.5尝试过它,就像魔法一样。