我使用 Rails 3.0.x,但我遇到了精简输出的问题。
当我使用时:
rails server thin
Thin 显示已处理请求的列表,并记录它们,几乎与 webrick 所做的完全一样。这很好,但是我没有找到任何方法通过此命令在 ssl 模式下使用 Thin。
在 ssl 模式下使用 Thin,如图所示 here ,我使用以下命令(加上 ssl 的参数):
thin start --ssl ...
使用此命令,日志仍然正常,但 Thin 不会在标准输出中输出任何内容。
所以我尝试了:
thin start --trace
但现在 Thin 将所有请求和所有响应(!) 写入标准输出,包括 javascript、图像等。
在 ssl 模式下使用 Thin,有没有办法像 webrick 那样输出所有已处理的请求?
最佳答案
使用命令启动 Thin 时:
rails server thin
可能的选项从 Rack 传播到 thin in Rack::Server#start:
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 中使用
我建议猴子补丁 Rack::Handler::Thin#run 的内容类似于 Controllers::Controller#start。
结果会是这样的:
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
关于ruby-on-rails - 如何使用 thin 和 ssl 获得干净的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647553/