我想将RAILS_ENV
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"]
这甚至可能吗?
经过一番调查,似乎
passenger_app_env
(rails_env
别名为)不接受该变量,而是将其视为文字。https://github.com/phusion/passenger-docker/issues/28
因此,不是
$env_rails_env
扩展为$RAILS_ENV
lua 读取的内容,而是将其视为 string$env_rails_env
。这就是日志行报告的原因database not configured
。此外,根据 nginx 问答,不应在配置文件中使用变量:
我最终使用的是
envsubst(1)
.