2014-12-21 80 views
0

我使用Capistrano 3將我的Rails 4應用程序部署到amazon ec2。控制器無法讀取服務器上的env變量

不幸的是,我在ec2上的應用程序無法讀取環境變量。 我已經添加了我的變量~/.bashrc/etc/environment並試圖

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

我可以通過$echo $my_var讓我的變量命令行界面和ENV['my_var']軌控制檯上對我的EC2實例。但是,每當我轉到需要讀取環境變量的頁面時,我得到一個http 500錯誤。根據日誌,似乎我的控制器無法讀取env變量。

我也重新啓動了我的服務器並重新部署了很多次,但沒有運氣。

如何讓我的服務器正確讀取env變量?順便說一下,我使用unicorn (4.8.3)capistrano-unicorn-nginx (~> 3.1.0)

回答

0

希望你現在已經找到了解決方案。我會發佈一個簡短的答案,所以也許這有利於谷歌的其他人。

由於服務器環境在操作系統和操作系統之間差別很大,Capistrano希望忽略它並儘可能地與其隔離。這是link with more info。此外,它可能是卡皮斯特拉諾不加載~/.bashrcmore info here。這些可能是您的應用程序無法讀取環境的原因。

我不確定爲什麼更新:default_env選項失敗。但是,這也不是解決這個問題的最好方法,因爲您必須將憑據放置在受版本控制的文件中。

解決祕密憑證問題的好方法是使用dotenvrails_config寶石。您可能更喜歡dotenv寶石,因爲它可以與env變量一起使用。

Rails 4.1+,內置secrets.yml「功能」,這也是很好的,可能是標準的前進。我寫了capistrano-secrets-yml插件,與此合作。

相關問題