Возможна ли перезагрузка lua-скриптов в реальном времени с помощью openresty и docker?

Я новичок в LUA и хочу попрактиковаться в сценариях LUA, используя nginx/openrestry.

Есть ли рабочий процесс, в котором я могу использовать докер, который запускает openresty, и связать файловую систему моего ноутбука с моим контейнером докера, чтобы, когда я вношу изменения в свой сценарий lua, я мог быстро перезагрузить сервер openrestry, чтобы я мог быстро увидеть, как мои изменения lua вступят в силу ?

Любая помощь или руководство будут оценены.


person Blankman    schedule 02.07.2020    source источник


Ответы (1)


Вы можете отключить кеширование кода Lua — https://github.com/openresty/lua-nginx-module#lua_code_cache — добавить lua_code_cache off внутрь блока директив http или server. На самом деле это не «горячая перезагрузка», это больше похоже на жизненный цикл php-запроса:

каждый запрос, обслуживаемый ngx_lua, будет выполняться в отдельном экземпляре виртуальной машины Lua.

Вы можете думать об этом так, как если бы код перезагружался при каждом запросе.

Однако обратите внимание на это:

Однако обратите внимание, что код Lua, встроенный в nginx.conf [...], не будет обновляться.

Это означает, что вы должны переместить весь свой код Lua из конфига nginx в модули Lua и только require их:

server {

  lua_code_cache off;

  location /foo {
    content_by_lua_block {
      -- OK, the module will be imported (recompiled) on each request
      require('mymodule').do_foo()
    }
  }

  location /bar {
    content_by_lua_block {
      -- Bad, this inlined code won't be reloaded unless nginx is reloaded.
      -- Move this code to a function inside a Lua module
      -- (e.g., `mymodule.lua`).
      local method = ngx.req.get_method()
      if method == 'GET' then
        -- handle GET
      elseif method == 'POST' then
        -- handle POST
      else
        return ngx.exit(ngx.HTTP_NOT_ALLOWED)
      end
    }
  }

}

Затем вы можете смонтировать свой код Lua с хоста в контейнер, используя --mount или --volume: https://docs.docker.com/storage/bind-mounts/

person un.def    schedule 02.07.2020