Phusion Passenger 不读取 .zshrc 环境变量
Phusion Passenger not reading .zshrc environment variables
我正在使用 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'] %>
有人可以解释一下我将如何在 Phusion Passenger 中使用 zsh 环境变量吗?
谢谢!
所以问题是您在 .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
在你的 drop-in 中使用 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
我正在使用 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'] %>
有人可以解释一下我将如何在 Phusion Passenger 中使用 zsh 环境变量吗?
谢谢!
所以问题是您在 .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
在你的 drop-in 中使用 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