web-dev-qa-db-fra.com

Comment déboguer le code lua dans nginx config?

Je souhaite insérer des points de journal (io.write) dans mon code Lua, lui-même en configuration nginx (à l'aide de HttpLuaModule pour nginx) Comment faire ça? Les journaux d'accès et d'erreurs ne les affichent pas.

11
Mannu

Si vous utilisez nginx, vous devez utiliser ngx.log. Par exemple:

ngx.log(ngx.STDERR, 'your message here')

Pour un exemple pratique, voir http://linuxfiddle.net/f/77630edc-b851-487c-b2c8-aa6c9b858ebb

Pour la documentation, voir http://wiki.nginx.org/HttpLuaModule#ngx.log

19
mikaraento

Une autre option pour le débogage Lua dans nginx (en plus de "l’impression") consiste à utiliser un Lua IDE qui prend en charge le débogage distant. J'ai posté des instructions sur la manière de procéder avec ZeroBrane Studio IDE. Une fois que vous l'avez configuré, vous obtenez la plupart des fonctions de débogage que vous pouvez attendre, telles que le pas à pas, les points d'arrêt, les inspections de variables, les traces de pile et une console pour exécuter des commandes Lua à distance.

5
Paul Kulchenko

un autre outil de dépannage pour openresty est lua-resty-console , qui vous permet de vérifier la variable lua, les modules importés, les fonctions d'appel, etc. nignx.conf. lancez le client et c'est parti.

[9] ngx(content)> ngx.config.prefix()
=> /workspace/lua-resty-console/
[10] ngx(content)> ngx.config.ngx_lua_version
=> 10011
[11] ngx(content)> ngx.config.nginx_configure()
=>  --prefix=/usr/local/Cellar/openresty/1.13.6.1/nginx --with-cc-opt='-O2 -I/usr/local/include -I/usr/local/opt/pcre/include -I/usr/local/opt/openresty-openssl/include' --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.61 ...


[12] ngx(content)> ngx.sha →→
ngx.sha1_bin()  ngx.shared.     
[12] ngx(content)> ngx.shared. →→
ngx.shared.mycache.    ngx.shared.metrics.  
[12] ngx(content)> c = ngx.shared.mycache
=> nil
[13] ngx(content)> c
=> { <userdata 1>,
  <metatable> = <1>{
    __index = <table 1>,
    add = <function 1>,
    delete = <function 2>,
    flush_all = <function 3>,
    flush_expired = <function 4>,
    get = <function 5>,
    get_keys = <function 6>,
    get_stale = <function 7>,
    incr = <function 8>,
    llen = <function 9>,
    lpop = <function 10>,
    lpush = <function 11>,
    replace = <function 12>,
    rpop = <function 13>,
    rpush = <function 14>,
    safe_add = <function 15>,
    safe_set = <function 16>,
    set = <function 17>
  }
}
[14] ngx(content)> c:set('a', 1)
=> true
[15] ngx(content)> c:get('a')
=> 1
[16] ngx(content)> c:get_keys()
=> { "a" }
0
Nick X