我使用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)
。
答案 0 :(得分:0)
希望您现在已经找到了解决方案。我会发布一个简短的回答,这可能对谷歌的其他人有益。
由于服务器环境因操作系统而异,因此Capistrano希望忽略它并尽可能地将其隔离。这是link with more info。此外,capistrano可能无法加载~/.bashrc
,more info here。这些可能是您的应用无法读取环境的原因。
我不确定更新:default_env
选项失败的原因。但这也不是解决此问题的最佳方法,因为您必须将凭据放在受版本控制的文件中。
解决秘密凭据问题的一种好方法是使用dotenv或rails_config宝石。您可能更喜欢dotenv
宝石,因为它适用于env vars。
Rails 4.1+,具有内置的secrets.yml
"功能"这也很好,可能会成为前进的标准。我编写了适用于此的capistrano-secrets-yml插件。