Como usar corretamente as variáveis ENV na configuração Nginx?

1

Eu quero passar a variável RAILS_ENV env para nginx e usá-la para definir o valor da diretiva rails_env .

Eu posso ler o valor da variável do ambiente com o módulo LUA:

location @app {
    set_by_lua $env_rails_env 'return os.getenv("RAILS_ENV")';
    return 200 'rails env is: ${env_rails_env}';
}

Quando eu curl , obtenho a resposta correta:

[jsosic@workstation ~]$ curl http://localhost:3005/
rails env is: development

Mas, se eu quiser usá-lo como um valor para a diretiva 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;
}

Eu recebo o seguinte log:

Message from application: '${env_rails_env}' database is not configured.
Available: ["default", "development", "test", "production"] 

Isso é possível?

    
por Jakov Sosic 25.04.2018 / 01:28

1 resposta

0

Após alguma investigação, parece que passenger_app_env (ao qual rails_env é aliado) não está aceitando a variável e, em vez disso, tratando-a como um literal.

link

Portanto, em vez de $env_rails_env expandir para o conteúdo do $RAILS_ENV lido por lua, ele é tratado como uma string $env_rails_env . É por isso que a linha de registro está reportando database not configured .

Além disso, por nginx Q & A, variáveis não devem ser usadas em arquivos de configuração:

"[Variables] are rather costly compared to plain static configuration. [A] macro expansion and "include" directives should be used [with] e.g. sed + make or any other common template mechanism." http://nginx.org/en/docs/faq/variables_in_config.html

O que acabei usando é envsubst(1) .

    
por 25.06.2018 / 15:09