Rails 3より前は、スクリプト/サーバーファイルを変更してSSLパラメーターを追加し、サーバーコマンドにHTTPSバージョンのWEBrickを使用するように指示できました。これらのスクリプトがすべてなくなったので、これをRails 3または4で動作させる方法を知っている人はいますか?
Rails 4のscripts
ディレクトリがなくなっても、bin
ディレクトリは残ります。bin/Rails
スクリプトを編集することで、SSL証明書でWEBrickを動作させることができます。テスト済みon Rails 4およびRuby 2.1.1、rbenvとともにインストールされます。
これの多くは このブログ投稿 および このStack Overflowの質問 からのものです。
#!/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'
Railsサーバーをアプリディレクトリから起動すると、SSL環境変数がtrueに設定され、デフォルトの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
を使用できます。
RailsアプリにHTTPS/SSLを使用するようにWEBrickを設定する代わりに、 Thin server を使用するように切り替えることができますHTTPS/SSLをすぐにセットアップするための便利なオプション。
まず、GemfileにThinをgemとして追加します。
gem 'thin'
次に、コマンドラインからbundle install
を実行します。
ローカル開発環境でHTTPS/SSLを使用してRailsアプリをテストしたいだけの場合、次に実行するだけです
thin start --ssl
これは本番環境には適していません、有効なSSL/HTTPS接続を検証可能かつ安全にするための認証局からのSSL証明書。
Thinに渡すことができる他のオプションもあります。 thin --help
を実行すると、それらの完全なリストを取得できます。たとえば、自分のIPアドレスとポートを指定したり、Thinをバックグラウンドプロセスにデーモン化したりするのが好きです。
thin start --ssl \
--address <ip-address> \
--port <port> \
--daemonize
ThinにSSL証明書(たとえば、有効な認証局から取得した証明書)を使用するように指示する場合は、次のオプションを使用できます。
thin start --ssl \
--ssl-cert-file <path-to-public-certificate> \
--ssl-key-file <path-to-private-key>