Ruby on rails 工头,Rails,Puma SSL/HTTPS
如何组合这两个命令,以便Rails使用Ruby on rails 工头,Rails,Puma SSL/HTTPS,ruby-on-rails,ssl,https,puma,foreman,Ruby On Rails,Ssl,Https,Puma,Foreman,如何组合这两个命令,以便Rails使用puma命令中的-b选项 puma: puma -b 'ssl://127.0.0.1:3000?key=/Users/cdrum/.ssh/server.key&cert=/Users/cdrum/.ssh/server.crt' -b 'tcp://127.0.0.1:3001' rails: bundle exec rails s --binding=127.0.0.1 -p 3000 -e $RAILS_ENV puma 目前,我得到了以下
puma
命令中的-b
选项
puma: puma -b 'ssl://127.0.0.1:3000?key=/Users/cdrum/.ssh/server.key&cert=/Users/cdrum/.ssh/server.crt' -b 'tcp://127.0.0.1:3001'
rails: bundle exec rails s --binding=127.0.0.1 -p 3000 -e $RAILS_ENV puma
目前,我得到了以下错误:
puma/binder.rb:272:in `initialize': Address already in use - bind(2) for"127.0.0.1" port 3000 (Errno::EADDRINUSE)
或者,我可以告诉
Rails
查找已经运行的puma
实例,而不是尝试再次启动它吗?您实际上可以通过单独运行puma
并将所有配置存储在config/puma.rb
中来解决这个问题。不同的证书管理,但无所谓:
threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }
threads threads_count, threads_count
port ENV.fetch('PORT') { 3000 }
environment ENV.fetch('RAILS_ENV') { 'development' }
plugin :tmp_restart
localhost_key = "#{Dir.pwd}/#{File.join('config', 'certs', 'localhost.key')}"
localhost_cert = "#{Dir.pwd}/#{File.join('config', 'certs', 'localhost.crt')}"
unless File.exist?(localhost_key)
def generate_root_cert(root_key) # rubocop:disable Metrics/AbcSize
root_ca = OpenSSL::X509::Certificate.new
root_ca.version = 2
root_ca.serial = 0x0
root_ca.subject = OpenSSL::X509::Name.parse '/C=BE/O=A1/OU=A/CN=localhost'
root_ca.issuer = root_ca.subject
root_ca.public_key = root_key.public_key
root_ca.not_before = Time.now
root_ca.not_after = root_ca.not_before + 2 * 365 * 24 * 60 * 60
root_ca.sign(root_key, OpenSSL::Digest::SHA256.new)
root_ca
end
root_key = OpenSSL::PKey::RSA.new(2048)
file = File.new(localhost_key, 'wb')
file.write(root_key)
file.close
root_cert = generate_root_cert(root_key)
file = File.new(localhost_cert, 'wb')
file.write(root_cert)
file.close
end
ssl_bind '0.0.0.0', '8443', key: localhost_key, cert: localhost_cert
现在HTTP和HTTPS都适用于我的Rails
app
Procfile
现在只是:
web: puma
您确实需要puma
gem的一个分支来避免SSL错误