Rails:明确告诉 Rails 它正在运行的端口

发布于 2024-10-02 17:37:26 字数 177 浏览 4 评论 0 原文

我有以下问题。我想明确告诉 Rails 它正在运行的端口,以便 _url 帮助程序将使用该端口而不是自动发现的端口。

根本问题是,我的 Rails 应用程序和 apache 都提供静态内容服务。只要在端口 80 (apache) 上访问网站就可以正常工作,但在运行 Thin 的端口上访问时则不行。 (这是自动发现的端口。)

I've got the following problem. I want to explicitly tell rails the port it is running on, so that the _url helper will use that port instead of the autodiscovered port.

The underlying problem is, that I have thin serving my rails app and apache serving static content. This works fine as long as the website is accessed on port 80 (apache) but not when accessed on the port thin is running on. (Which is the port that get's auto discovered.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安人多梦 2024-10-09 17:37:26

Rails 应该创建相对链接,其中不包含完全限定的域名,请参见示例 这里,我引用:

link_to "Profile", profile_path(@profile)

# => <a href="/profiles/1">Profile</a>;

另一方面, *_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 :

link_to "Profile", profile_path(@profile)

# => <a href="/profiles/1">Profile</a>;

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.

七秒鱼° 2024-10-09 17:37:26

由于 Ruby on Rails 使用自己的服务器,因此访问您的网站(以及随后访问您的 Ruby on Rails 应用程序)的用户将需要重定向到适当的端口。

要更改 Ruby on Rails 服务器的端口,您应该使用 -p 选项启动服务器:

ruby s -p <port-number>

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:

ruby s -p <port-number>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文