来自配置文件的NGINX和环境变量

时间:2011-01-19 13:45:07

标签: ruby-on-rails ruby nginx passenger env

我正在尝试通过它的配置文件将一些环境变量设置为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

顺便通过shell导出设置环境变量不是我的应用程序的选项。

以下是行:

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:    }

此致

亚历

3 个答案:

答案 0 :(得分:5)

来自documentation you linked to env指令的“上下文”是 main ,而不是 server 。将指令放在server { ... }块之外(任何块之外)。

另见this discussion。我不相信env指令符合您的要求。

答案 1 :(得分:0)

不要传递env指令。只需在启动nginx时使用-E标志:

 sudo -E /usr/local/nginx/sbin/nginx

答案 2 :(得分:-1)

使用nginx为rails app设置环境变量的解决方案。

例如,您的RAILS_ROOT是:/ opt / myapp_MANDANT

然后,以下代码将从RAILS_ROOT路径中提取MANDANT并设置为rails env。

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文件中。

使用此approch的好方法是使用--bind选项挂载。

示例:

   mkdir railsapp_mandant
   mount -t /originalsource /railsapp_mandant

然后将rails app的公共路径设置为/ originalsource / public /而不是/ railsapp_mandant / public /