如何使用thin和ssl获得干净的输出?

时间:2012-11-30 14:55:09

标签: ruby-on-rails ssl thin

我使用Rails 3.0.x,我的瘦输出有问题。

当我使用时:

rails server thin

Thin显示已处理请求的列表,并记录它们,几乎与webrick完全一样。这很好,但我没有找到任何方法在ssl模式下使用Thin命令。

要在ssl模式下使用Thin,如here所示,我使用以下命令(加上ssl的参数):

thin start --ssl ...

使用此命令,日志仍然很好,但Thin不会在标准输出中输出任何内容。

所以我试过了:

thin start --trace

但是现在Thin在标准输出中写入所有请求和所有响应(!),包括javascript,图像等。

使用Thin in ssl模式,有没有办法输出所有处理过的请求,就像webrick那样?

1 个答案:

答案 0 :(得分: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