Ruby on rails 3 RoR3重定向不包括RAILS\u RELATIVE\u URL\u ROOT

Ruby on rails 3 RoR3重定向不包括RAILS\u RELATIVE\u URL\u ROOT,ruby-on-rails-3,apache2,passenger,reverse-proxy,Ruby On Rails 3,Apache2,Passenger,Reverse Proxy,在我的面向公众的Apache2服务器上,通过子URI访问Rails 3应用程序,如 https://www.myserver.com/myapp/controller... 该服务器配置为通过以下方式反向代理到另一个承载Rails应用程序的Apache2服务器: http://intranet.server.com/myapp 在我的intranet服务器的VirtualHost设置中 SetEnv RAILS_RELATIVE_URL_ROOT "/myapp" 在我的config/en

在我的面向公众的Apache2服务器上,通过子URI访问Rails 3应用程序,如

https://www.myserver.com/myapp/controller...
该服务器配置为通过以下方式反向代理到另一个承载Rails应用程序的Apache2服务器:

http://intranet.server.com/myapp
在我的intranet服务器的VirtualHost设置中

SetEnv RAILS_RELATIVE_URL_ROOT "/myapp"
在我的config/environments/production.rb文件中,我取消了该行的注释

config.log_level = :debug
这样,我的应用程序中的第一个执行方法就会出现以下问题:

logger.debug { "The environment variable RAILS_RELATIVE_URL_ROOT is presently #{ENV['RAILS_RELATIVE_URL_ROOT']}" }
果然,在生产日志文件中,您可以看到:

The environment variable RAILS_RELATIVE_URL_ROOT is presently /myapp
但是,日志中的下一行是,这显然是浏览器的目标:

Redirected to https://www.myserver.com/controller/action

我在Stackoverflow上了解到了这个环境变量,所以这是一个为其工作的人,但另一个人说它没有,而另一个人说它有。根据我的经验,我们现在处于平局。我遗漏了什么吗?

据我所知,能够直接使用ENV-var在相当长的一段时间前已经改变了:


因此,在environment.rb(或初始值设定项)中,您可以设置config.action\u controller.relative\u url\u root=ENV['RAILS\u relative\u url\u root']

我发现了错误。外部服务器上的反向代理设置仅引用了内部服务器的主机名,并且没有指向我的RoR3应用程序的路径。

哇,非常感谢, 我终于明白了

似乎我们需要对目标rails上的确切相对url进行代理:, apache上相同的匹配uri

例如:http://localhost/example/ 到http://localhost:3000/example/

以下示例已在Rails 4上进行了测试:

因此,在代理httpd.conf中:

代理请求关闭
ProxyPreserveHost On

订单拒绝,允许
允许来自所有用户

ProxyPass/示例http://localhost:3000/示例

ProxyPassReverse/示例http://localhost:3000/示例

接下来,在rails config.ru中:

require::File.expand_path(“../config/environment”,文件
#运行Rails.application
映射ActionController::Base.config.relative\u url\u root do
运行示例Rails::应用程序
结束

映射“/”do
运行Examplerails::应用程序
结束

最后,在config/application.rb中

模块示例Rails
类应用程序 config.action\u controller.relative\u url\u root=“/示例
结束
结束

请密切注意尾随/
有些有尾随斜杠,有些则不需要。
在上面的代码中,也删除标记和url之间的一些间距,

我正在尝试格式化它以显示在这里

我发现Rails Github上的这个线程很有用:

最后,我在config/routes中执行了以下操作(我通过RAILS\u relative\u url\u root环境变量配置了
relative\u url\u root
):


我认为这是一个2.1到2.2的变化。在3.0中(至少根据其他地方有人对源代码进行的剪切和粘贴,Rails已经按照您的建议进行了操作。这就是为什么在我的案例中,记录器消息显示它已按我的预期进行了设置。不幸的是,我必须做的其他事情是撤销它,或者它确实还没有工作。我确实查看了灯塔记录。只是为了然后我添加了一条logger.debug消息来报告该值。您得到的是nag消息:弃用警告:ActionController::Base.relative\u url\u root无效。请停止使用它。我正在使用Rails 3.0.3
Rails.application.routes.draw do |*args|
  scope Rails.application.config.relative_url_root || "/" do
    ...
  end
end