2017-08-24 54 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,在答案中看到我的編輯 –