gpt4 book ai didi

ruby-on-rails - 如何配置 WEBrick 以在 Rails 中使用 SSL?

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:04 25 4
gpt4 key购买 nike

在 Rails 3 之前,您可以修改脚本/服务器文件以添加 SSL 参数并告诉服务器命令使用 WEBrick 的 HTTPS 版本。现在所有这些脚本都消失了,有谁知道如何让它与 Rails 3 或 4 一起工作?

最佳答案

虽然 Rails 4 中的 scripts 目录消失了,但 bin 目录仍然存在。您可以通过编辑 bin/rails 脚本让 WEBrick 使用 SSL 证书。在 Rails 4 和 Ruby 2.1.1 上测试,使用 rbenv 安装。

其中大部分来自 this blog postthis Stack Overflow question .

#!/usr/bin/env ruby

require 'rails/commands/server'
require 'rack'
require 'webrick'
require 'webrick/https'

if ENV['SSL'] == "true"
module Rails
class Server < ::Rack::Server
def default_options
super.merge({
:Port => 3001,
:environment => (ENV['RAILS_ENV'] || "development").dup,
:daemonize => false,
:debugger => false,
:pid => File.expand_path("tmp/pids/server.pid"),
:config => File.expand_path("config.ru"),
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey => OpenSSL::PKey::RSA.new(
File.open("certs/server.key").read),
:SSLCertificate => OpenSSL::X509::Certificate.new(
File.open("certs/server.crt").read),
:SSLCertName => [["CN", WEBrick::Utils::getservername]],
})
end
end
end
end

APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'

当 SSL 环境变量设置为 true 时,从 app 目录启动 rails 服务器现在可以启动启用 SSL 的服务器,而当省略环境变量时,将保留默认的 rails 设置。

$ SSL=true rails s
=> Booting WEBrick
=> Rails 4.1.0 application starting in development on https://0.0.0.0:3001
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
[2014-04-24 22:59:10] INFO WEBrick 1.3.1
[2014-04-24 22:59:10] INFO ruby 2.1.1 (2014-02-24) [x86_64-darwin13.0]
[2014-04-24 22:59:10] INFO
Certificate:
Data:
...

如果您不想使用预生成的证书,您可以使用 WEBrick 的 Utils::create_self_signed_cert,如以下答案所述:

Configure WEBrick to use automatically generated self-signed SSL/HTTPS certificate

关于ruby-on-rails - 如何配置 WEBrick 以在 Rails 中使用 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3640993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com