3

我正在尝试通过它的配置文件为 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:    }

问候,

亚历克斯

4

3 回答 3

5

您链接到env指令的“上下文”的文档中main,不是server。将指令放在您的server { ... }块之外(任何块之外)。

另请参阅此讨论。我不相信该env指令可以满足您的要求。

于 2011-01-19T16:39:26.427 回答
0

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

 sudo -E /usr/local/nginx/sbin/nginx
于 2012-06-25T20:47:27.187 回答
-1

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

例如,您的 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 文件中即可工作。

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

例子:

   mkdir railsapp_mandant
   mount -t /originalsource /railsapp_mandant

然后将 rails 应用程序的公共路径设置为 /originalsource/public/ 而不是 /railsapp_mandant/public/

于 2011-01-19T15:03:15.143 回答