1

Rails 3.0.x を使用していますが、薄い出力に問題があります。

私が使用する場合:

rails server thin

Thin は処理されたリクエストのリストを表示し、webrick とほぼ同じようにログに記録します。これは素晴らしいことですが、このコマンドで Thin を ssl モードで使用する方法が見つかりませんでした。

ここに示されているように、ssl モードで Thin を使用するには、次のコマンドを使用します (および ssl の引数)。

thin start --ssl ...

このコマンドでは、ログはまだ良好ですが、Thin は標準出力に何も出力しません。

だから私は試しました:

thin start --trace

しかし、Thin はすべてのリクエストとすべてのレスポンス(!) を標準出力 (javascript、画像などを含む) に書き込みます。

ssl モードの Thin では、webrick のように、処理されたすべてのリクエストを出力する方法はありますか?

4

1 に答える 1

1

次のコマンドでThinを起動する場合:

rails server thin

可能なオプションは、Rack :: Server#start:でRackからthinに伝播されます。

server.run wrapped_app, options

しかし、Rack :: Handler :: Thin#runでは、ハンドラーがこれらのオプションを使用していないことがわかります。

 module Rack
  module Handler
    class Thin
      def self.run(app, options={})
        app = Rack::Chunked.new(Rack::ContentLength.new(app))
        server = ::Thin::Server.new(options[:Host] || '0.0.0.0',
                                    options[:Port] || 8080,
                                    app)
        yield server if block_given?
        server.start
      end
    end
  end
end

コマンドラインからSSLモードでThinを使用する場合:

thin start --ssl

オプションはThin::Runner#parserで解析され、Controllers :: Controller#startで使用されます

Controllers :: Controller#startに似たコンテンツでRack :: Handler :: Thin#runにモンキーパッチを適用することをお勧めします。

結果は次のようになります。

  module Rack
    module Handler
      class Thin
        def self.run(app, options={})
          app = Rack::Chunked.new(Rack::ContentLength.new(app))
          server = ::Thin::Server.new(options[:Host] || '0.0.0.0',
                                      options[:Port] || 8080,
                                      app)
          server.ssl = true
          server.ssl_options = { :private_key_file => PATH_TO_KEY_FILE, :cert_chain_file => PATH_TO_CERT_FILE }
          yield server if block_given?
          server.start
        end
      end
    end
  end
于 2012-12-05T15:51:21.127 に答える