Rails生产模式:SSL收到的记录超过了允许的最大长度

时间:2012-10-29 17:35:25

标签: ruby-on-rails webrick

嗨我不确定这是否应该发生,但是当我在终端中执行RAILS_ENV=production rails server然后尝试运行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/,后面是“S”吗?但我不能改变它,因为它会自动进入https。

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

3 个答案:

答案 0 :(得分:6)

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

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

在production.rb中查找:

config.force_ssl = true

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

force_ssl

注意:它们具有相同的名称,但它们的工作方式却截然不同。

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

此外,您可以考虑使用其他方法来调试应用程序,除了在本地计算机上的生产中运行它,但具体如何做到这一点取决于您尝试调试的错误的性质。

答案 1 :(得分:4)

对我来说config.force_ssl = true位于 config / environments / production.rb

答案 2 :(得分:0)

当我将机器的hostname添加到/etc/hosts并为ipv4和ipv6使用相同的名称时,发生了此错误。

它看起来像:

127.0.0.1     localhost MyMachine
::1       ip6-localhost MyMachine

在将ipv6个人计算机名称更新为ip6-之前,Rails开始工作。