AuthLogic更改Rails 3初始化顺序?

时间:2012-01-16 00:16:50

标签: ruby-on-rails ruby-on-rails-3 routing authlogic

我有一个正在运行的Rails 3.1应用程序,我现在正在尝试使用Authlogic。它正在反向代理情况下在子uri下部署。到目前为止,我已经通过在ENV['RAILS_RELATIVE_URL_ROOT']中设置config/environments/production.rb来正常工作 - 一切正常,特别是包括javascript_include_taglink_to,资源路由等等

然而,添加Authlogic会导致javascript_include_tagstylesheet_include_tag - Rails在生成的网址中不包含RAILS_RELATIVE_URL_ROOT,就像之前一样。其他一切都很好,但是url_forform_fornew_*_path等等都运转良好。我做了一些挖掘,最终发现*_include_tag函数使用名为relative_url_root的全局配置选项,并且在actionpack/action_controller/metal/compatibility.rb的第15行初始化期间设置了此属性。我添加了一些调试语句,看到没有AuthLogic,操作顺序如下:

  1. environments/*.rb已载入
  2. production.rb已评估,ENV['RAILS_RELATIVE_URL_ROOT']已设置
  3. actionpack/action_controller/metal/compatibility.rb运行中的代码,以及ActionController的relative_url_root配置属性集。
  4. 但是,如果我将gem authlogic添加到应用程序的Gemfile中,则订单会更改 - action_controller金属内容首先发生 ,然后运行特定于环境的内容。因此,在这些条件下,在设置relative_url_root配置参数时,ENV['RAILS_RELATIVE_URL_ROOT'] 尚未尚未设置,因此就某些部分而言应用程序担心它不存在。

    查看Authlogic的代码,我看不到任何会影响Rails初始化内容的东西 - 它似乎没有注册任何引擎,初始化器或其他任何类似的东西(虽然我当然可能错了那)。该应用程序的Gemfile除了Authlogic之外还包含其他几个宝石,并且它们似乎都不会以这种方式影响应用程序。我把gem文件放在Gemfile中的顺序似乎并不重要,我认为这在逻辑上意味着它必须是Authlogic特别是正在做的事情 - 但我肯定无法弄清楚是什么。有什么想法吗?

0 个答案:

没有答案