如何在引擎插件中修改Rails的配置?

时间:2009-07-21 12:12:23

标签: ruby-on-rails configuration plugins

我正在为Rails创建一个引擎作为插件。我希望它能够在加载时对Rails的配置进行必要的更改,以便它可以指定其Gem依赖关系以及添加一些加载路径。

插件的init.rb文件可以访问配置对象,但这实际上是只读的,您可以指定一个gem,但它没有区别,初始化程序必须已经在此时运行。

我现在已经解决了这个问题,需要一个带有新Rails :: Initializer块的文件,如下所示:

Rails::Initializer.run do |config|
  config.gem "authlogic", :version => ">= 2.0.9"
  # etc
end

这样可以消除主应用程序环境中的任何现有配置.rb。

也许我可以通过在引擎中添加一个生成器来解决这个问题,这个生成器可以在环境中添加一些东西,在正确的阶段加载插件的配置,或者可能有一种方法可以为配置/初始化程序添加一个文件来完成这项工作。不知道如何最好地解决这个问题。

3 个答案:

答案 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尝试过它,就像魔法一样。