簡體   English   中英

如何使用Ruby on Rails 4.1.0beta1管理秘密密鑰和heroku?

[英]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入侵某種全流環境變量管理解決方案,不如順其自然:

  1. secrets.yml取出所有敏感內容。
  2. 像將它們作為默認值一樣,將secrets.yml檢入源代碼管理。
  3. 對於所有敏感值,請將其從正常環境變量導入秘密ERB(例如some_var: <%= ENV["some_var"] %>
  4. 像平常一樣管理那些ENV變量,例如使用Figaro gem。
  5. 像平常一樣,將ENV變量發送到Heroku,例如使用Figaro gem的rake任務。

問題的關鍵是,這不要緊,你如何管理你的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。

查看此鏈接了解heroku設置

如果你想像這樣在本地使用

KEY = xyz OTHER_KEY = 123 rails

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM