我知道Rack中间件过滤器是一个Ruby类,它有一个initialize和一个call方法,我知道call方法有一个"env"参数,就像这样:
class MyFilter
def initialize(app)
end
def call(env)
end
end
我的问题是:"env"参数到底是什么被发送到"call"的?2这和Rails的ENV环境(即开发、测试、生产)是一样的吗?
谢谢!
我知道Rack中间件过滤器是一个Ruby类,它有一个initialize和一个call方法,我知道call方法有一个"env"参数,就像这样:
class MyFilter
def initialize(app)
end
def call(env)
end
end
我的问题是:"env"参数到底是什么被发送到"call"的?2这和Rails的ENV环境(即开发、测试、生产)是一样的吗?
谢谢!
5条答案
按热度按时间9njqaruj1#
env
只是一个散列,机架本身和各种中间件都在其中添加了价值。要了解散列中的各种键,请查看Rack Specification。
下面是一个示例env散列:
为了使它更易于使用, checkout Rack::Request,这使得访问env散列中的值更容易。
vawmfj5a2#
我建议你可以尝试用写一个简单的编程来打印'env'变量。
输入链接本地主机:3000
monwx1rj3#
env
变量是一个哈希值,它包含了很多有用的信息,包括请求头和请求体,以及可能由上游中间件添加的运行时环境数据。wdebmtf24#
看看source code,根据你使用的web服务器,你可以在你的env哈希中得到不同的值,我建议 * 只 * 使用documentation中的值。
env基本上是web服务器特有的request对象的散列版本,Rack做了一些工作来给予一个规范化的env,这样中间件就可以在不同的web服务器上保持一致的行为。
syqv5f0l5#
我知道这是一个老问题。
然而,我会努力帮助即将到来的ROR开发人员。
在Rack中间件中,env变量是一个哈希值,它保存了环境和传入HTTP请求的详细信息,包括请求方法、路由、头和其他数据。
call函数是处理Rack应用程序中传入请求的主要入口点,这就是为什么在中间件中放置def call(env)时可以访问env散列的原因。当基于Rack的应用程序接收到请求时,会将请求发送给顶部Rack组件的call方法。
在此方案中,env散列是作为call函数的参数提供的,因为您要创建的是作为Rack堆栈组件的唯一中间件。call方法可以读取和修改env散列中的数据,其中包括有关环境和传入请求的信息,以便处理请求。
我建议看看这个教程:link以了解有关env变量及其在Rack中间件中的功能的更多信息。
本课将详细介绍env变量,沿着各种机架堆栈组件如何使用和修改该变量。