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