Как запустить SSL-сертификат на локальном хосте для приложения Ruby on Rails? - PullRequest
0 голосов
/ 27 ноября 2018

Запуск Ruby 1.9.3, Rails 4.2.10 и использование Тонкого сервера в разработке.

Мое приложение использует SSL на Heroku.Необходимо запустить SSL на моем локальном Mac.

Я следовал этому руководству.

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

Вот мой 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

Здесьэто ошибка, которую я получил в трассировке

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>'

ОБНОВЛЕНИЕ:

Хотя мой procfile содержит информацию о сертификате.Я вручную запускаю свой сервер THIN rails через терминал, как этот.

bundle exec rails server thin start -p 3001 -e development

Поэтому не уверен, что он использует 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

Попробуйте нажать 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

===== ОБНОВЛЕНИЕ 3: ======

Попытка Puma.io не удалась та же проблема (не удается установить безопасное соединение).Попытка Puma-dev не смогла даже распознать .dev URl Попытка ручного добавления сертификата и ключа снова та же проблема (не удается установить безопасное соединение).

Приложение загружает форму для входа в приложение в http://localhost:3000. Как толькоЯ захожу в приложение, которое загружает правильную страницу учетной записи пользователя, используя http, затем примерно через 1 секунду страница перенаправляется на ту же страницу учетной записи пользователя, но https, которая говорит: «Не удается установить безопасное соединение».Понятия не имею, почему браузер заставляет меня https?Ничто в приложении не настроено на https, чтобы я мог "Найти / Заменить".

Сгенерировал новый secret_key, так как думаю, что он был коротким 20 символами вместо 30. Вставлен в перезапущенный сервер secret_key.rb.Тот же вопрос ssl.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вы можете использовать puma-dev для локального развития.Это делает HTTPS доступным без хлопот.

Puma-dev автоматически делает приложения доступными также через SSL.Когда вы впервые запустите puma-dev, вероятно, появится диалоговое окно для ввода вашего пароля.То, что произошло, когда puma-dev генерирует собственную сертификацию CA, хранится в ~ / Library / Application Support / io.puma.dev / cert.pem.

0 голосов
/ 29 ноября 2018

Обновлено приложение до 2.3.1, которое заставило работать puma-dev.Удалено config.action_cable.disable_request_forgery_protection = true, который выдавал ошибку.

0 голосов
/ 27 ноября 2018

ОБНОВЛЕНИЕ: на основе вашего последнего комментария.Вам необходимо запустить локальный сервер либо с

foreman start -f Procfile

, либо с

bundle exec thin start -p 3001 --ssl –-ssl-key-file ~/.ssl/localhost.key –-ssl-cert-file ~/.ssl/localhost.crt

Однако этот профиль не будет работать в рабочей среде.Возможно, вы захотите использовать альтернативный Procfile-dev файл в разработке

ORIGINAL:

В Procfile попробуйте жесткое кодирование порта, используйте 3001 для ssl

web: bundle exec thin start -p 3001 --ssl –-ssl-key-file ~/.ssl/localhost.key –-ssl-cert-file ~/.ssl/localhost.crt

UPDATE 2:Для локального разработчика вам вообще не нужен сертификат, вы должны иметь возможность разрешить доступ через Chrome

bundle exec thin start -p 3001 --ssl  #this should work without any other arguments

Затем вам нужно передать порт в браузер

https://localhost:3001

Вы также можете попробовать закомментировать это в application.rb

#config.force_ssl = true

Это должно быть установлено только в production.rb

Почему вы не можете установить gem install foreman I'mне уверен, почему вы не можете, это звучит как какая-то проблема с сетью на вашем компьютере, у вас есть блокировка брандмауэра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...