我的 Rails 4 应用程序使用了一个自定义机架中间件。如果客户端未提供有效信息(我正在处理 API) ,则中间件本身只是默认设置Accept
和Content-Type
标头。application/json
因此,在每次请求之前,它都会更改这些标头,并且在每次请求之后,它会添加一个带有自定义媒体类型信息的自定义 X-Something-Media-Type 头。
我想切换到 Puma,因此我有点担心这种中间件的线程安全性。我没有使用实例变量,除了一次@app.call
我们在每个中间件中遇到的常见变量,但即使在这里我也复制了我在 RailsCasts 的评论中读到的一些内容:
def initialize(app)
@app = app
end
def call(env)
dup._call(env)
end
def _call(env)
...
status, headers, response = @app.call(env)
...
dup._call
为了处理线程安全问题真的有用吗?
除了那个@app
实例变量,我只使用当前环境变量构建的当前请求:
request = Rack::Request.new(env)
我打电话env.update
来更新标题和表单信息。
当我切换Webrick
到并发 Web 服务器(例如)时,预期该中间件会出现一些问题是否足够危险Puma
?
如果是,您是否知道一些方法来进行一些测试以隔离我的中间件的非线程安全部分?
谢谢。