如何在本地主机上为 Ruby on Rails 应用程序运行 SSL 证书?

jdo*_*dog 6 ruby ssl ruby-on-rails

运行 Ruby 1.9.3、Rails 4.2.10 并使用 Thin 服务器进行开发。

我的应用程序在 Heroku 上使用 SSL。需要在我的本地 Mac 上运行 SSL。

我遵循了这个教程。

https://www.botreetechnologies.com/blog/enable-ssl-for-rails-development-environment-two-mines

这是我的 Procfile:

web: bundle exec rails server thin start -p 3001 -e development --ssl --ssl-verify --ssl-key-file server.key --ssl-cert-file server.crt
Run Code Online (Sandbox Code Playgroud)

这是我在跟踪中收到的错误

Invalid request: Invalid HTTP format, parsing fails.
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/thin-1.6.4/lib/thin/request.rb:84:in `execute'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/thin-1.6.4/lib/thin/request.rb:84:in `parse'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/thin-1.6.4/lib/thin/connection.rb:39:in `receive_data'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.8/lib/eventmachine.rb:193:in `run_machine'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.8/lib/eventmachine.rb:193:in `run'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/thin-1.6.4/lib/thin/backends/base.rb:73:in `start'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/thin-1.6.4/lib/thin/server.rb:162:in `start'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/rack-1.6.4/lib/rack/handler/thin.rb:19:in `run'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/rack-1.6.4/lib/rack/server.rb:286:in `start'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/railties-4.2.4/lib/rails/commands/server.rb:80:in `start'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:80:in `block in server'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:75:in `tap'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:75:in `server'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    /Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>'
    script/rails:6:in `require'
    script/rails:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)

更新:

虽然我的 procfile 包含有关 cert 的信息。我通过像这样的终端手动启动我的 THIN Rails 服务器。

bundle exec rails server thin start -p 3001 -e development
Run Code Online (Sandbox Code Playgroud)

那么不确定它是否使用了 Procfile?

更新2========

尝试使用bundle exec thin start -p 3001 --ssl 将force_ssl 设置为 false

服务器启动

jn$ bundle exec thin start -p 3001 --ssl
/Users/jn/.rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/thin-1.6.4/lib/thin/backends/base.rb:103: warning: epoll is not supported on this platform
Using rack adapter
Thin web server (v1.6.4 codename Gob Bluth)
Maximum connections set to 1024
Listening on 0.0.0.0:3001, CTRL+C to stop
Run Code Online (Sandbox Code Playgroud)

尝试点击https://localhost:3001,服务器因错误而停止

libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: Encryption not available on this event-machine
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

=====更新3:======

尝试 Puma.io 失败了同样的问题(无法建立安全连接)。尝试过 Puma-dev 甚至无法识别 .dev URl 尝试再次手动添加证书和密钥,同样的问题(无法建立安全连接)。

应用程序在http://localhost:3000加载我们的应用程序登录表单。一旦我登录,应用程序就会使用 http 加载正确的用户帐户页面,然后大约 1 秒后页面将重定向到相同的用户帐户页面,但 https 表示“无法建立安全连接”。不知道为什么浏览器强制我使用 https?应用程序中没有任何内容设置为我可以“查找/替换”的 https。

生成了一个新的 Secret_key,因为认为它短了 20 个字符,而不是 30 个。粘贴到 Secret_key.rb 中并重新启动了服务器。同样的 ssl 问题。

jdo*_*dog 0

将应用程序更新到 2.3.1,使 puma-dev 可以正常工作。删除了config.action_cable.disable_request_forgery_protection = true引发错误的内容。