![](/img/trans.png)
[英]How do you manage Ruby on Rails migrations with a team of developers?
[英]How do you manage secret keys and heroku with Ruby on Rails 4.1.0beta1?
隨着secrets.yml文件的發布,我取消了對Figaro的依賴,並將所有密鑰移到secrets.yml並將該文件添加到.gitignore。
但是當我嘗試推送到Heroku時,Heroku表示他們需要在我的存儲庫中使用該文件才能部署網站。 這是有道理的,但是如果可以避免的話,我不想在git中輸入密鑰。
使用Figaro,我將運行一個rake任務以將密鑰作為環境變量部署到heroku,並將application.yml保留在.gitignore中。 顯然,我不能再這樣做了。 那么我該如何處理呢?
秘密不是解決環境變量問題的完整方法,也不是像Figaro這樣的東西的直接替代品。 將“秘密”視為您現在應在應用程序和更廣泛的環境變量之間使用的額外接口。 這就是為什么現在應該使用Rails.application.secrets.your_variable
而不是ENV["your_variable"]
來調用變量的原因。
secrets.yml
文件本身就是該接口,它並不意味着包含實際的機密(名稱不正確)。 您可以看到這一點,因為即使在文檔中的示例中,Secrets也會為任何敏感值(例如SECRET_KEY_BASE
值)導入環境變量,並且該變量會自動檢查到源代碼管理中。
因此,與其嘗試將Secrets入侵某種全流環境變量管理解決方案,不如順其自然:
secrets.yml
取出所有敏感內容。 secrets.yml
檢入源代碼管理。 some_var: <%= ENV["some_var"] %>
) 問題的關鍵是,這不要緊,你如何管理你的ENV瓦爾-無論是手動,使用費加羅,一個.env
文件,無論... secrets.yml
僅僅是翻譯這些ENV瓦爾到您的Rails應用程序的接口。
盡管它增加了抽象的額外步驟和一些額外的工作,但使用此接口方法還是有優勢的。
無論您認為使用Secrets在概念上是一個好主意,還是隨心所欲地使用它都會為您省去很多麻煩。
PS。 如果您確實選擇破解它,請小心使用heroku_secrets
gem。 在撰寫本文時,它在啟動序列中作為before_initialize
運行,因此您的ENV vars將不可用於config/environments/
目錄中的任何配置文件(在該目錄中,您通常將它們用於放置Amazon S3密鑰之類的東西)。
那個Figaro任務的secrets.yml的等效項是來自heroku_secrets gem,來自https://github.com/alexpeattie/heroku_secrets :
gem 'heroku_secrets', github: 'alexpeattie/heroku_secrets'
這使您可以運行
rake heroku:secrets RAILS_ENV=production
將secrets.yml的內容作為環境變量提供給heroku。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.