2013-08-04 14 views
10

Теперь я программирую в Lua с nginx. Я пишу файл Lua и размещаю его в каталоге в /usr/local/nginx/lua. Тогда в nginx.conf я пишу место, например,Путь пакетов Lua в nginx

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, то в Lua package.path будет /usr/local/include.

Если я нахожусь в /usr/local/nginx/sbin и исполню ./nginx, то в Lua package.path будет /usr/local/nginx/include.

Я думаю, что каталог, в котором я запускаю сервер nginx, не должен быть ограничен, , но я не знаю, как это решить.

+0

Вы используете HttpLuaModule? Если да, возможно, вам нужно установить lua_package_path и/или lua_package_cpath [см. Doc] (http://wiki.nginx.org/HttpLuaModule#lua_package_path) – Mali

+0

Да, я видел api, но путь и cpath связаны с '/', я сомневаюсь, есть ли другие методы, которые могут сделать путь связанным с каталогом nginx. – freedoo

ответ

13

Вы хотите изменить 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 скрипты могут найти друг друга, даже если сервер работает один каталог вверх.

+0

Следует отметить, что ';; 'добавляет пакет package.path по умолчанию и не является опечаткой. – Randall

Смежные вопросы