gpt4 book ai didi

ruby-on-rails - 我如何从 Rails 中访问 Rack 环境?

转载 作者:数据小太阳 更新时间:2023-10-29 06:25:40 26 4
gpt4 key购买 nike

我有一个看起来像这样的 Rack 应用程序:

class Foo
def initialize(app)
@app = app
end
def call(env)
env["hello"] = "world"
@app.call(env)
end
end

在将我的 Rack 应用程序挂接到 Rails 之后,如何从 Rails 中访问 env["hello"]

更新:感谢 Gaius 的回答。 Rack and Rails 允许您在请求期间或 session 期间存储内容:

# in middleware
def call(env)
Rack::Request.new(env)["foo"] = "bar" # sticks around for one request

env["rack.session"] ||= {}
env["rack.session"]["hello"] = "world" # sticks around for duration of session
end

# in Rails
def index
if params["foo"] == "bar"
...
end
if session["hello"] == "world"
...
end
end

最佳答案

我很确定您可以使用 Rack::Request 对象来传递请求范围的变量:

# middleware:
def call(env)
request = Rack::Request.new(env) # no matter how many times you do 'new' you always get the same object
request[:foo] = 'bar'
@app.call(env)
end

# Controller:
def index
if params[:foo] == 'bar'
...
end
end

或者,您可以直接获取“env”对象:

# middleware:
def call(env)
env['foo'] = 'bar'
@app.call(env)
end

# controller:
def index
if request.env['foo'] == 'bar'
...
end
end

关于ruby-on-rails - 我如何从 Rails 中访问 Rack 环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com