我有一个正在运行的Rails 3.1应用程序,我现在正在尝试使用Authlogic。它正在反向代理情况下在子uri下部署。到目前为止,我已经通过在ENV['RAILS_RELATIVE_URL_ROOT']
中设置config/environments/production.rb
来正常工作 - 一切正常,特别是包括javascript_include_tag
,link_to
,资源路由等等
然而,添加Authlogic会导致javascript_include_tag
和stylesheet_include_tag
- Rails在生成的网址中不包含RAILS_RELATIVE_URL_ROOT
,就像之前一样。其他一切都很好,但是url_for
,form_for
,new_*_path
等等都运转良好。我做了一些挖掘,最终发现*_include_tag
函数使用名为relative_url_root
的全局配置选项,并且在actionpack/action_controller/metal/compatibility.rb
的第15行初始化期间设置了此属性。我添加了一些调试语句,看到没有AuthLogic,操作顺序如下:
environments/*.rb
已载入production.rb
已评估,ENV['RAILS_RELATIVE_URL_ROOT']
已设置actionpack/action_controller/metal/compatibility.rb
运行中的代码,以及ActionController的relative_url_root
配置属性集。但是,如果我将gem authlogic
添加到应用程序的Gemfile中,则订单会更改 - action_controller金属内容首先发生 ,然后运行特定于环境的内容。因此,在这些条件下,在设置relative_url_root
配置参数时,ENV['RAILS_RELATIVE_URL_ROOT']
尚未尚未设置,因此就某些部分而言应用程序担心它不存在。
查看Authlogic的代码,我看不到任何会影响Rails初始化内容的东西 - 它似乎没有注册任何引擎,初始化器或其他任何类似的东西(虽然我当然可能错了那)。该应用程序的Gemfile除了Authlogic之外还包含其他几个宝石,并且它们似乎都不会以这种方式影响应用程序。我把gem文件放在Gemfile中的顺序似乎并不重要,我认为这在逻辑上意味着它必须是Authlogic特别是正在做的事情 - 但我肯定无法弄清楚是什么。有什么想法吗?