0

我们的 rails 应用程序使用 Rails Web Server - Puma(版本4.3.7)和 Rails(版本6.1.3)。该应用程序由命令启动rails s --binding=0.0.0.0 但在浏览器中,当我点击http://localhost:3000它时,它会返回301 moved permanently并重定向到具有机器主机名的 URL。访问此应用程序中的 API 时会观察到同样的情况。

这正在成为在 kubernetes 环境中运行应用程序的障碍。该应用程序在容器中运行良好,但在我通过wget localhost:3000它返回访问应用程序时在容器内运行301。你能帮我解决这个问题吗?

anupam:app$ curl http://127.0.0.1:3000
<!DOCTYPE html>
<html lang="en-US">
<head><title>301 Moved Permanently</title></head>
<body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://li-376d8bcc-2115-11b2-a85c-9b485751a7c9.ibm.com:3000/">here</a>.</p>
</body>
</html>
4

1 回答 1

0

问题是应用程序绑定到容器的主机名而不是localhost. 特别是Rack::CanonicalHost中间件将主机名设置为容器的主机名。改变这有助于我解决问题。简而言之,我更改了以下行config.ru

use Rack::CanonicalHost, ENV['HOSTNAME'] if ENV['HOSTNAME'].present?

use Rack::CanonicalHost, ENV['RAILS_HOSTNAME'] if ENV['RAILS_HOSTNAME'].present?

它解决了这个问题。

于 2021-05-27T07:21:37.170 回答