使用以下命令启动 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