Если вы хотите использовать класс Response, вам нужно создать его экземпляр по результатам вызова уровня промежуточного программного обеспечения дальше по стеку.
Кроме того, вам не нужны переменные экземпляра для такого промежуточного программного обеспечения, и, вероятно, вы не хотите использовать их таким образом (@ status и т. Д. Останутся в экземпляре промежуточного программного обеспечения после обработки запроса)
class RackApp
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
# confusingly, response takes its args in a different order
# than rack requires them to be passed on
# I know it's because most likely you'll modify the body,
# and the defaults are fine for the others. But, it still bothers me.
response = Rack::Response.new body, status, headers
response.set_cookie("foo", {:value => "bar", :path => "/", :expires => Time.now+24*60*60})
response.finish # finish writes out the response in the expected format.
end
end
Если вы знаете, что делаете, вы можете напрямую изменить заголовок cookie, если не хотите создавать новый объект.