5

嗨,我不确定这是否应该发生,但是当我RAILS_ENV=production rails server在终端中执行 a 然后尝试运行 localhost:3000 时,它给了我一个错误:

Secure Connection Failed

An error occurred during a connection to localhost:3000.

SSL received a record that exceeded the maximum permissible length.

(Error code: ssl_error_rx_record_too_long)

我在某处读到可能是因为我的网址https://localhost:3000/不是http://localhost:3000/http 后面的“S”?但我无法更改它,因为它会自动转到 https。

这是正常的吗?我试图在生产中运行它的原因是因为当我尝试将我的应用程序部署到 heroku 时出现错误(这里提出的问题:Rails + Heroku : ActionView::Template::Error)所以我认为它会帮助我调试。

4

3 回答 3

6

在运行时尝试通过 SSL 访问 Rails 时,此错误是正常的rails server,除非您破解默认rails server脚本以支持 SSL。您可以查看此博客文章以了解如何执行此操作。也就是说,我建议您不要在本地计算机上通过 SSL 访问您的应用程序。

您的 Rails 应用程序中可能有一个配置,在您运行生产环境时重定向到 SSL。尝试暂时注释掉该配置,以便您可以在生产环境中运行,而无需在本地计算机上配置 SSL。

在 production.rb 中查找:

config.force_ssl = true

或者,在 application_controller.rb(或任何其他控制器)中查找:

force_ssl

注意:它们具有相同的名称,但在引擎盖下它们的工作方式非常不同。

或者,您可以通过其他 Web 服务器在本地计算机上运行 Rails rails server,但这超出了本问题的范围,您仍然需要对其进行配置以支持 SSL。就我个人而言,我在本地机器上安装了 nginx(带有独角兽),并带有自签名 SSL 证书,这样我就可以轻松地在我的应用程序中测试 SSL 相关的行为。

此外,除了在本地机器上的生产环境中运行应用程序之外,您还可以考虑使用其他方法来调试应用程序,但具体如何执行取决于您尝试调试的错误的性质。

于 2012-10-30T06:33:26.343 回答
4

对我来说config.force_ssl = true是在config/environments/production.rb

于 2013-06-01T12:00:42.827 回答
0

当我将我的机器添加hostname/etc/hosts具有相同名称的 ipv4 和 ipv6 时,我发生了这个错误。

所以它看起来像:

127.0.0.1     localhost MyMachine
::1       ip6-localhost MyMachine

更新 ipv6 个人机器名称以添加之前的ip6-Rails 开始工作。

于 2019-08-27T20:39:01.560 回答