Ruby on rails 3 RoR3重定向不包括RAILS\u RELATIVE\u URL\u ROOT
在我的面向公众的Apache2服务器上,通过子URI访问Rails 3应用程序,如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
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
订单拒绝,允许
允许来自所有用户
#运行Rails.application
映射ActionController::Base.config.relative\u url\u root do
运行示例Rails::应用程序
结束 映射“/”do
运行Examplerails::应用程序
结束 最后,在config/application.rb中 模块示例Rails
类应用程序
结束
结束 请密切注意尾随/
有些有尾随斜杠,有些则不需要。
在上面的代码中,也删除标记和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