17

我现在正在使用 nginx 在 Lua 中编程。我编写我的 Lua 文件并将其放在/usr/local/nginx/lua. 然后在nginx.conf我写一个位置,比如

location /lua {
    lua_need_request_body on;
    content_by_lua_file lua/test.lua;
}

当我通过 Nginx 访问这个位置时,会执行 Lua 脚本。

在 Lua 文件中,通常可以包含您自己的 Lua 模块,并指明搜索路径

common_path = '../include/?.lua;'
package.path = common_path .. package.path

在常见的 Lua 编程中,相对路径是相对于我的 Lua 文件的。

但是对于 nginx,相对路径是相对于我启动 Nginx 的目录。

就像,我在/usr/local/nginx并执行sbin/nginx,然后在 Luapackage.path中将是/usr/local/include.

如果我在/usr/local/nginx/sbin并执行./nginx,那么在 Luapackage.path中将是/usr/local/nginx/include

我觉得我启动nginx服务器的目录应该没有限制,但是不知道怎么解决。

4

2 回答 2

21

您想修改 Luapackage.path以在您拥有源代码的目录中进行搜索。对你来说,就是lua/

您可以在 http 块中使用指令执行此操作lua_package_path(文档说您可以将它放在顶层,但是当我尝试它时它不起作用)。

所以对你来说:

http {
    #the scripts in lua/ need to refer to each other
    #but the server runs in lua/..

    lua_package_path "./lua/?.lua;;";

    ...
}

现在,即使服务器运行一个目录,您的 lua 脚本也可以找到彼此。

于 2013-09-21T15:52:47.927 回答
3

您现在可以使用 $prefix 了。

例如

http{
    lua_package_path "$prefix/lua/?.lua;;";
}

然后像这样启动你的 nginx

nginx -p /opt -c /etc/nginx.conf

那么搜索路径将是

/opt/lua
于 2019-05-10T11:50:03.223 回答