【问题标题】:Foreman, Rails, Puma SSL/HTTPS工头、Rails、Puma SSL/HTTPS
【发布时间】:2019-07-26 09:44:17
【问题描述】:

如何组合这两个命令,以便 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/binder.rb:272:in `initialize': Address already in use - bind(2) for"127.0.0.1" port 3000 (Errno::EADDRINUSE)

或者,我可以告诉Rails 寻找已经运行的puma 实例而不是尝试再次启动它吗?

【问题讨论】:

    标签: ruby-on-rails ssl https puma foreman


    【解决方案1】:

    您实际上可以通过单独运行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 应用程序。

    Procfile 现在只是:

    web: puma
    

    确实需要puma gem 的special 分支,以避免 SSL 错误。

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2022-11-08
      • 2014-02-08
      • 2018-05-02
      • 2021-03-09
      • 2020-08-19
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多