1

我使用 Rails 3.0.x,但输出很薄。

当我使用:

rails server thin

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

要在 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 回答