Nginx ngx lua:局部变量的作用域,init在init_by_lua_块中
我是nginx lua的新手,从以前的开发人员那里得到了一个设置。试图通过文档了解范围,但我很不确定 现在是这样的Nginx ngx lua:局部变量的作用域,init在init_by_lua_块中,nginx,lua,openresty,lua-ngx-module,Nginx,Lua,Openresty,Lua Ngx Module,我是nginx lua的新手,从以前的开发人员那里得到了一个设置。试图通过文档了解范围,但我很不确定 现在是这样的 init_by_lua_block { my_module = require 'my_module' my_module.load_data() } location / { content_by_lua_block { my_module.use_data() } } 在我的单元里 local _M = {} local c
init_by_lua_block {
my_module = require 'my_module'
my_module.load_data()
}
location / {
content_by_lua_block {
my_module.use_data()
}
}
在我的单元里
local _M = {}
local content = {}
function _M.use_data()
-- access content variable
end
function _M.load_data()
-- code to load json data into content variable
end
return _M
我的理解是,内容是一个局部变量,所以它的生存期在每个请求中。但是,它在init\u中被\u lua\u块初始化,并被其他本地函数使用,这让我感到困惑。这是一种好的做法吗?这个内容变量的实际生存期是多少
非常感谢阅读。init\u by\u lua[\u block]
在nginx加载配置阶段运行,然后再分叉工作进程
所以content
变量是全局变量,在每个请求中都是相同的
找到了以下内容:
要在同一nginx工作进程处理的所有请求之间全局共享数据,请将共享数据封装到Lua模块中,使用Lua require内置项导入模块,然后在Lua中操作共享数据。这是因为所需的Lua模块只加载一次,所有协同路由将共享模块的同一副本(其代码和数据)。但请注意,Lua全局变量(请注意,不是模块级变量)不会在请求之间持久存在,因为每个请求都有一个协程隔离设计
下面是一个完整的小示例:
-- mydata.lua
local _M = {}
local data = {
dog = 3,
cat = 4,
pig = 5,
}
function _M.get_age(name)
return data[name]
end
return _M
然后从nginx.conf访问它:
location /lua {
content_by_lua_block {
local mydata = require "mydata"
ngx.say(mydata.get_age("dog"))
}
}
谢谢你的回答。然而,它似乎不是全局变量。刚找到这个直接回答我问题的甜点!我应该把mydata.lua放在哪里nginx应该怎么做才能看到mydata.lua模块?