我想将RAILS_ENV
环境变量传递给 nginx 并使用它来设置指令的值rails_env
。
我可以使用 LUA 模块从环境中读取变量的值:
location @app {
set_by_lua $env_rails_env 'return os.getenv("RAILS_ENV")';
return 200 'rails env is: ${env_rails_env}';
}
当我curl
这样做时,我得到了正确的答案:
[jsosic@workstation ~]$ curl http://localhost:3005/
rails env is: development
但是,如果我想将其用作 nginx 指令的值:
location @app {
set_by_lua $env_rails_env 'return os.getenv("RAILS_ENV")';
rails_env $env_rails_env;
limit_req zone=one burst=100;
passenger_enabled on;
}
我收到以下日志:
Message from application: '${env_rails_env}' database is not configured.
Available: ["default", "development", "test", "production"]
这可能吗?
答案1
经过一番调查后,似乎passenger_app_env
(rails_env
别名为) 不接受变量,而是将其视为文字。
https://github.com/phusion/passenger-docker/issues/28
因此,它不会$env_rails_env
扩展到 lua 读取的内容$RAILS_ENV
,而是被视为字符串$env_rails_env
。这就是日志行报告的原因database not configured
。
此外,根据 nginx 问答,变量不应该在配置文件中使用:
“与普通的静态配置相比,“[变量]成本相当高。[A]宏扩展和“include”指令应该与例如 sed + make 或任何其他常见模板机制一起使用。“ http://nginx.org/en/docs/faq/variables_in_config.html
我最终使用的是envsubst(1)
。