Ruby on rails 控制器无法读取服务器上的环境变量

Ruby on rails 控制器无法读取服务器上的环境变量,ruby-on-rails,amazon-ec2,unicorn,capistrano3,Ruby On Rails,Amazon Ec2,Unicorn,Capistrano3,我使用Capistrano3将Rails4应用程序部署到AmazonEC2 不幸的是,我在ec2上的应用程序无法读取环境变量。 我已将变量添加到~/.bashrc,/etc/environment并尝试 # config/deploy/staging.rb set :default_env, { ... } 我可以通过命令行界面上的$echo$my_var和ec2实例上rails控制台上的ENV['my_var']获取变量。然而,每当我进入需要读取环境变量的页面时,我都会遇到一个HTT

我使用Capistrano3将Rails4应用程序部署到AmazonEC2

不幸的是,我在ec2上的应用程序无法读取环境变量。 我已将变量添加到
~/.bashrc
/etc/environment
并尝试

# config/deploy/staging.rb
set :default_env, {
    ...
}
我可以通过命令行界面上的
$echo$my_var
和ec2实例上rails控制台上的
ENV['my_var']
获取变量。然而,每当我进入需要读取环境变量的页面时,我都会遇到一个HTTP500错误。根据日志,我的控制器似乎无法读取env变量

我也重新启动了我的服务器并重新部署了很多次,但是运气不好

如何使服务器正确读取env变量


顺便说一下,我正在使用
unicorn(4.8.3)
capistrano unicorn nginx(~>3.1.0)

希望您现在已经找到了解决方案。我将发布一个简短的回答,这样谷歌可能会从中受益

由于服务器环境因操作系统而异,Capistrano希望忽略它并尽可能与之隔离。这是一个例子。另外,可能是capistrano没有加载
~/.bashrc
。这些可能是应用程序无法读取环境的原因

我不知道为什么更新
:default_env
选项失败。但这也不是解决这个问题的最佳方法,因为您必须将凭据放在版本控制的文件中

解决机密凭证问题的一个好方法是使用或gems。您可能更喜欢
dotenv
gem,因为它与env变量一起工作

Rails 4.1+具有内置的
secrets.yml
“特性”,这一特性也很好,可能是未来的标准。我写了一个插件来处理这个问题