我正在使用Phusion Passenger 5.1.8并在我的.zshrc
export SECRET_KEY_BASE='secure_key_base'
export DATABASE_NAME='db_production'
export DATABASE_PASSWORD='secure_db_pass'
然后我做了source ~/.zshrc
并使用sudo 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'] %>
有人可以解释一下我如何使用Phsh Passenger使用zsh环境变量吗?
谢谢!
答案 0 :(得分: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=
来声明变量。或者您可以使用带有环境变量的文件。
添加了drop-in后,需要重新加载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