2017-08-24 83 views
0

我使用Phusion客运5.1.8,并建立在我的.zshrc的Phusion乘客不读.zshrc环境变量

export SECRET_KEY_BASE='secure_key_base' 
export DATABASE_NAME='db_production' 
export DATABASE_PASSWORD='secure_db_pass' 

以下,然后我做了source ~/.zshrcsudo service nginx restart nginx的重新启动。但是,我的应用程序抱怨它无法找到SECRET_KEY_BASE并且无法启动。如果我手动将这些放在config/secrets.yml中,那么一切正常。

config/secrets.yml有以下几点:

production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

和我config/database.yml文件有:

production: 
    <<: *default 
    database: <%= ENV['DATABASE_NAME'] %> 
    password: <%= ENV['DATABASE_PASSWORD'] %> 

是否有人可以解释我是如何会去有关使用zsh的环境变量与乘客的Phusion?

谢谢!

+0

关机nginx的服务和运行'须藤nginx的用变量的文件'从终端看,看看它是否能正常工作 –

+0

不是不行::(没有区别 – DaniG2k

+0

没有sudo尝试 –

回答

2

所以问题是你在.zshrc中使用你的环境变量,你从systemd运行nginx。两者彼此没有联系。

你需要的是你的nginx应该有这些变量,它通过Systemd服务运行。您需要使用所谓的Drop-in

mkdir -p /etc/systemd/system/nginx.service.d 

cat > /etc/systemd/system/nginx.service.d/90-nginx-myapp.conf <<EOF 
[Service] 
Environment=SECRET_KEY_BASE=XYZ 
Environment=SECRET_KEY_BASE2=XYZ2 
EnvironmentFile=-/etc/myapp/environment 
EOF 

您可以使用Environment=来声明变量。或者你可以使用带有环境变量的文件。

一旦你添加了下拉式的,你需要重新加载systemd

$ systemctl daemon-reload 
$ systemctl status nginx 
● nginx.service - A high performance web server and a reverse proxy server 
    Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled) 
    Drop-In: /etc/systemd/system/nginx.service.d 
      └─90-nginx-myapp.conf 
    Active: inactive (dead) 

然后用systemctl restart nginx

现在nginx的应该得到你想要它有变量。

编辑-1

如果您需要在这两个NGINX和你的shell使用变量。在创建像beow

SECRET_KEY_BASE=XYZ 
SECRET_KEY_BASE2=XYZ2 

在您的下拉式使用的EnvironmentFile=并在.bashrc.bash_profile.zshrc添加以下行

# set -a will make sure that X=Y is equivalent to export X=Y 
set -a 
source /etc/myapp/environment 
# disable auto export of variable 
set +a 
+0

我爱你。非常感谢 – DaniG2k

+0

有趣......这种方法似乎可以防止像'RAILS_ENV =生产导轨资产:预编译'这样的命令在工作。显然,因为env vars被存储在一个Nginx配置中。你有什么方法可以让这些变量存储在Nginx和rails命令可以访问的环境变量中吗? – DaniG2k

+1

@ DaniG2k,在答案中看到我的编辑 –