2013-08-04 11 views
10

Ich programmiere jetzt in Lua mit Nginx. Ich schreibe meine Lua-Datei und lege sie in ein Verzeichnis in /usr/local/nginx/lua. Dann in nginx.conf ich einen Ort schreiben, wieLua's Paketpfad in Nginx

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

Wenn ich auf diese Position durch Nginx wird das Lua Script ausgeführt werden.

In einer Lua-Datei, ein in der Regel Ihre eigenen Lua-Modul enthalten kann, und geben Sie den Suchpfad

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

Gemeinsam Lua-Programmierung, ist ein relativer Pfad zu meiner Lua-Datei relativ.

Aber mit Nginx sind die relativen Pfade relativ zu dem Verzeichnis, in dem ich Nginx starte.

Wie, ich bin in /usr/local/nginx und sbin/nginx ausführen, dann in Lua package.path wird die /usr/local/include sein.

Wenn ich in /usr/local/nginx/sbin bin und ./nginx ausführen, dann wird in Lua package.path/usr/local/nginx/include sein.

Ich denke, das Verzeichnis Ich starte den Nginx-Server sollte nicht begrenzt sein, , aber ich weiß nicht, wie das zu lösen ist.

+0

Verwenden Sie HttpLuaModule? Wenn ja, Vielleicht müssen Sie lua_package_path und/oder lua_package_cpath [siehe doc] (http://wiki.ninx.org/HttpLuaModule#lua_package_path) setzen – Mali

+0

yeah, ich habe die API gesehen, aber der Pfad und cpath beziehen sich auf die '/', bezweifle ich, dass es andere Methoden gibt, die den Pfad mit dem nginx-Verzeichnis in Beziehung setzen können. – freedoo

Antwort

13

Sie möchten die Lua package.path ändern, um in dem Verzeichnis zu suchen, in dem Sie Ihren Quellcode haben. Für dich ist das lua/.

Sie tun dies mit der lua_package_path Direktive, in der HTTP-Block (die Dokumente sagen, Sie können es in die oberste Ebene setzen, aber wenn ich es versuchte, hat es nicht funktioniert).

Also für Sie:

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

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

    ... 
} 

nun Ihren Lua-Skripte sich auch finden kann, obwohl der Server ein Verzeichnis nach oben läuft.

+0

Es ist anzumerken, dass ''; 'den Standard-Paketpfad anfügt und kein Tippfehler ist. – Randall