lua local变量注意使用的上下文

322 阅读1分钟

测试环境

  1. macos
  2. openresty 1.19.3.2
  3. lua5.1

配置1

location /product_version {
  default_type text/html;
  set_by_lua_block $PRODUCT_VERSION {
    ngx.log(ngx.NOTICE,"consul_version:",os.getenv("CONDA_PYTHON_EXE"))
    ngx.log(ngx.NOTICE,"site_version:",os.getenv("CONDA_PREFIX"))
    local version
    if os.getenv("CONDA_PREFIX") then
      version = os.getenv("CONDA_PYTHON_EXE")..":"..os.getenv("CONDA_PREFIX")
      ngx.log(ngx.NOTICE,"version1",version)
    else
      version = os.getenv("CONDA_PREFIX")
      ngx.log(ngx.NOTICE,"version2",version)
    end
    ngx.log(ngx.NOTICE,"product_version:",version)
    return version
  }

请求: curl http://localhost:8080/product_version

响应体: /opt/anaconda3/bin/python:/opt/anaconda3

配置2

location /product_version {
  default_type text/html;
  set_by_lua_block $PRODUCT_VERSION {
    ngx.log(ngx.NOTICE,"consul_version:",os.getenv("CONDA_PYTHON_EXE"))
    ngx.log(ngx.NOTICE,"site_version:",os.getenv("CONDA_PREFIX"))
    if os.getenv("CONDA_PREFIX") then
      local version = os.getenv("CONDA_PYTHON_EXE")..":"..os.getenv("CONDA_PREFIX")
      ngx.log(ngx.NOTICE,"version1",version)
    else
      local version = os.getenv("CONDA_PREFIX")
      ngx.log(ngx.NOTICE,"version2",version)
    end
    ngx.log(ngx.NOTICE,"product_version:",version)
    return version
  }

curl http://localhost:8080/product_version 响应体为空

配置1与配置2的区别在于local变量的使用