繁体   English   中英

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

[英]NGINX and environment variables from configuration file

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

问候,

亚历克斯

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

另见本讨论 我不相信env指令能满足您的需求。

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

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

使用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文件中即可运行。

使用此approch的一个好方法是使用--bind选项mount。

例:

   mkdir railsapp_mandant
   mount -t /originalsource /railsapp_mandant

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM