sinatra应用程序可以找到环境变量,但测试脚本可以

时间:2015-01-05 17:38:35

标签: ruby sinatra environment-variables ubuntu-server

我使用环境变量的存在来确定我的应用程序是否已部署(不适合在本地计算机上运行)。

我的测试脚本可以找到并显示变量值,但根据我的应用程序,变量不存在。

test.rb

Secret_Key_Path = ENV['APPLICATION_VERSION'] ? '/path/to/encrypted_data_bag_secret' : File.expand_path('~/different/path/to/encrypted_data_bag_secret')
puts ENV['APPLICATION_VERSION']
puts Secret_Key_Path
puts File.exists? Secret_Key_Path

info.rb(相关位)

::Secret_Key_Path = ENV['APPLICATION_VERSION'] ? '/path/to/encrypted_data_bag_secret' : File.expand_path('~/different/path/to/encrypted_data_bag_secret')

如果我记录Secret_Key_Path的值,则记录为我不期望的值(即'~/different/path/to/encrypted_data_bag_secret'而不是'/path/to/encrypted_data_bag_secret'

这是我如何启动我的应用程序(从我的主要可执行文件内部开始,所以我可以从任何地方运行app install而不必转到该文件夹​​)

exec "(cd /path/to/app/root && exec sudo rackup --port #{80} --host #{'0.0.0.0'} --pid /var/run/#{NAME}.pid -O NAME[#{NAME}] -D)"

如果我env | grep APP我得到:

APPLICATION_VERSION=1.0.130
APPLICATION_NAME=app-name

有人认为这是一个执行环境问题,但我不确定如何解决这个问题。

那是怎么回事?任何帮助&建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用-E开关保存环境变量:

来自手册:

-E, - pre-env              向安全策略指示用户希望保留其现有环境变量。安全政策可以              如果用户没有保留环境的权限,则返回错误。

示例:

$ export APPLICATION_VERSION=1.0.130
$ export APPLICATION_NAME=app-name

检查变量:

$ sudo -E env | grep  APP

你应该得到输出:

APPLICATION_NAME=app-name
APPLICATION_VERSION=1.0.130

此外,如果您想永久保留变量,可以添加到/etc/sudoers文件中:

Defaults env_keep += "APPLICATION_NAME APPLICATION_VERSION"