控制器无法读取服务器上的env变量

时间:2014-12-21 09:05:21

标签: ruby-on-rails amazon-ec2 unicorn capistrano3

我使用Capistrano 3将我的Rails 4应用程序部署到amazon ec2。

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

# config/deploy/staging.rb
set :default_env, {
    ...
}

我可以通过命令行界面上的$echo $my_var和我ec2实例上rails控制台上的ENV['my_var']获取变量。但是,每当我前往需要读取环境变量的页面时,我都会收到http 500错误。根据日志,似乎我的控制器无法读取env变量。

我也重新启动了我的服务器并重新部署了很多次,但没有运气。

如何让我的服务器正确读取env变量?

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

1 个答案:

答案 0 :(得分:0)

希望您现在已经找到了解决方案。我会发布一个简短的回答,这可能对谷歌的其他人有益。

由于服务器环境因操作系统而异,因此Capistrano希望忽略它并尽可能地将其隔离。这是link with more info。此外,capistrano可能无法加载~/.bashrcmore info here。这些可能是您的应用无法读取环境的原因。

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

解决秘密凭据问题的一种好方法是使用dotenvrails_config宝石。您可能更喜欢dotenv宝石,因为它适用于env vars。

Rails 4.1+,具有内置的secrets.yml"功能"这也很好,可能会成为前进的标准。我编写了适用于此的capistrano-secrets-yml插件。