2013-08-04 15 views
10

Ora sto programmando in Lua con nginx. Scrivo il mio file Lua e lo metto in una directory in /usr/local/nginx/lua. Poi nel nginx.conf scrivo una posizione, ad esempioPercorso pacchetto Lua in nginx

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

Quando accedo questa posizione attraverso Nginx, sarà eseguito lo script Lua.

In un file Lua, uno di solito può includere il proprio modulo di Lua, e indicare il percorso di ricerca

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

Nel comune di programmazione Lua, un percorso relativo è relativo al mio file Lua.

Ma con nginx, i percorsi relativi sono relativi alla directory in cui comincio Nginx.

Come, io sono in /usr/local/nginx ed eseguire sbin/nginx, poi in Lua package.path sarà il /usr/local/include.

Se sono in /usr/local/nginx/sbin ed eseguo ./nginx, quindi in Lua package.path sarà /usr/local/nginx/include.

Penso che la directory che avvio il server nginx non dovrebbe essere limitata, ma non so come risolvere questo problema.

+0

Si sta utilizzando HttpLuaModule? Se è così, forse è necessario impostare lua_package_path e/o lua_package_cpath [vedi doc] (http://wiki.nginx.org/HttpLuaModule#lua_package_path) – Mali

+0

Sì, ho visto l'API, ma il percorso e cPath è relazionarsi con il '/', dubito che ci siano altri metodi che possono rendere il percorso correlato alla directory nginx – freedoo

risposta

13

si desidera modificare il Lua package.path per la ricerca nella directory dove avete il vostro codice sorgente. Per te, questo è lua/.

Si fa questo con la direttiva lua_package_path, nel blocco http (i documenti dicono che si può metterlo nel livello più alto, ma quando ho provato che non ha funzionato).

Quindi per voi:

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

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

    ... 
} 

Ora i vostri script lua possono trovare l'altro, anche se il server esegue una directory in su.

+0

Da notare, il ';;' aggiunge il pacchetto package.path, e non è un refuso. – Randall