Путь пакетов Lua в nginx
Теперь я программирую в Lua с nginx. Я пишу файл Lua и помещаю его в каталог в /usr/local/nginx/lua
. Затем в nginx.conf
я пишу местоположение, например
location /lua {
lua_need_request_body on;
content_by_lua_file lua/test.lua;
}
Когда я получаю доступ к этому местоположению через Nginx, будет выполнен Lua script.
В файле Lua обычно можно включить свой собственный модуль Lua и указать путь поиска
common_path = '../include/?.lua;'
package.path = common_path .. package.path
В общем программировании Lua относительный путь относится к моему файлу Lua.
Но с nginx относительные пути относятся к каталогу, в котором я запускаю Nginx.
Например, я в /usr/local/nginx
и выполняю sbin/nginx
, тогда в Lua package.path
будет /usr/local/include
.
Если я нахожусь в /usr/local/nginx/sbin
и выполняю ./nginx
, то в Lua package.path
будет /usr/local/nginx/include
.
Я думаю, что каталог, в котором я запускаю сервер nginx, не должен быть ограничен,
но я не знаю, как это разрешить.
Ответы
Ответ 1
Вы хотите изменить Lua package.path
для поиска в каталоге, в котором у вас есть исходный код. Для вас это lua/
.
Вы делаете это с помощью директивы lua_package_path
в блоке http (документы говорят, что вы можете поместить ее на верхний уровень, но когда я пытался, чтобы это не сработало).
Итак, для вас:
http {
#the scripts in lua/ need to refer to each other
#but the server runs in lua/..
lua_package_path "./lua/?.lua;;";
...
}
Теперь ваши сценарии lua могут находить друг друга, даже если сервер запускает один каталог вверх.
Ответ 2
Вы можете использовать префикс $ сейчас.
Например
http{
lua_package_path "$prefix/lua/?.lua;;";
}
И начни свой nginx вот так
nginx -p /opt -c /etc/nginx.conf
Тогда путь поиска будет
/opt/lua