Rails:明确告诉 Rails 它正在运行的端口
我有以下问题。我想明确告诉 Rails 它正在运行的端口,以便 _url 帮助程序将使用该端口而不是自动发现的端口。
根本问题是,我的 Rails 应用程序和 apache 都提供静态内容服务。只要在端口 80 (apache) 上访问网站就可以正常工作,但在运行 Thin 的端口上访问时则不行。 (这是自动发现的端口。)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Rails 应该创建相对链接,其中不包含完全限定的域名,请参见示例 这里,我引用:
另一方面, *_url 快捷方式正在使用完整路径,当您位于反向代理后面时(在您的情况下是 apache),这很糟糕。
您是否尝试过仅使用 *_path 进行链接,使用 *_url 进行重定向,因为在重定向的情况下,apache 应该重写 url 以匹配其端口(假设您在 Apache 级别使用 ProxyPass 和 ProxyPassReverse 指令)?
如果您使用 url_for,您可以通过将 :only_path 设置为 true 来强制它是相对的。
如果您的 apache 配置不是基于 ProxyPass,您能否复制/粘贴有趣的部分,以便我可以修复此答案?
提前致谢。
Rails is supposed to create relative links, which do not include the fully qualified domain name, see example here, I quote :
the *_url shortcuts, on the other hand, are using the full path, which is bad when you're behind a reverse proxy (that's apache in your case).
Have you tried using only *_path for links, and *_url for redirects, as, in the case of a redirect, apache should rewrite the url to match its port (assuming you're using the ProxyPass and ProxyPassReverse directives at Apache level) ?
If you use url_for, you can force it to be relative by setting the :only_path to true.
If your apache configuration is not based on ProxyPass, could you please copy/paste the interesting part so I can fix this answer ?
Thanks in advance.
由于 Ruby on Rails 使用自己的服务器,因此访问您的网站(以及随后访问您的 Ruby on Rails 应用程序)的用户将需要重定向到适当的端口。
要更改 Ruby on Rails 服务器的端口,您应该使用 -p 选项启动服务器:
Because Ruby on Rails uses its own server, users visiting your website (and subsequently your Ruby on Rails application) will need to be redirected to the appropriate port.
To change the port of Ruby on Rails server you should start the server with the -p option: