NGINX и переменные окружения из конфигурационного файла

Я пытаюсь установить некоторые переменные среды для nginx через его файл конфигурации. Я использую nginx/0.8.53, и он не работает.

server {
    listen 80;
    server_name localdictus;
    root /opt/vdmo_dictus/public;   # <--- be sure to point to 'public'!
    passenger_enabled on;
    rails_env development;
    env VDMO_MANDANT = "somevalue";
    }

Это сообщение об ошибке:

unknown directive "env" in /opt/nginx/conf/nginx.conf:43

В документации мне сказано, что есть команда "env"... так что я делаю не так?? http://wiki.nginx.org/CoreModule#env

Кстати, установка переменных среды через экспорт в оболочке не подходит для моего приложения.

Вот строки:

37:    server {
38:    listen 80;
39:    server_name localdictus;
40:    root /opt/vdmo_dictus/public;   # <--- be sure to point to 'public'!
41:    passenger_enabled on;
42:    rails_env development;
43:    env VDMO_MANDANT = "somevalue";
44:    }

С уважением,

Алекс


person Alexander Bierbrauer    schedule 19.01.2011    source источник
comment
что именно ваша 43 строка?   -  person shingara    schedule 19.01.2011
comment
.. и строка 42, на всякий случай.   -  person Andy Lindeman    schedule 19.01.2011
comment
Это должно быть при переполнении сервера, так как это проблема конфигурации nginx, а не Rails.   -  person the Tin Man    schedule 19.01.2011


Ответы (3)


Из документации, на которую вы ссылались, "Контекст" для директивы env равен main, а не server. Поместите директиву за пределы вашего блока server { ... } (вне любого блока).

См. также это обсуждение. Я не верю, что директива env делает то, что вы ищете.

person Phrogz    schedule 19.01.2011

Не передавайте директиву env. Просто используйте флаг -E при запуске nginx:

 sudo -E /usr/local/nginx/sbin/nginx
person rthbound    schedule 25.06.2012
comment
Извините, я только что заметил, что в ваших вопросах говорится: установка переменных среды через экспорт в оболочке, кстати, не вариант для моего приложения - person rthbound; 27.06.2012

Решение для установки переменных среды для приложения rails с использованием nginx.

Например, ваш RAILS_ROOT: /opt/myapp_MANDANT

Затем следующий код извлечет MANDANT из пути RAILS_ROOT и установит его в среду rails.

split = RAILS_ROOT.split("_")
puts split.inspect


if split.size > 1
    ENV['VDMO_SYSTEM'] = split[2]
    ENV['VDMO_MANDANT'] = split[1]
elsif split.size > 0
    ENV['VDMO_SYSTEM'] = nil
    ENV['VDMO_MANDANT'] = split[1]
end

поместите этот код в файл environment.rb, чтобы он работал.

Хорошим способом использования этого подхода является монтирование с параметром --bind.

Пример:

   mkdir railsapp_mandant
   mount -t /originalsource /railsapp_mandant

затем установите общедоступный путь приложения rails на /originalsource/public/ вместо /railsapp_mandant/public/

person Alexander Bierbrauer    schedule 19.01.2011