2014-09-06 81 views
1

我正在部署Rails應用程序。
當我在secretts.yml文件中擁有secret_key_base:<%= ENV["SECRET_KEY_BASE"] %>時,我在nginx日誌文件中得到錯誤:secret_key_base。
我已經生成在控制檯中使用rake secret祕密,並放置在〜/ .bashrc中
出口SECRET_KEY_BASE="secret" 從我跑echo $SECRET_KEY_BASE和複製的祕密secrets.yml與祕密更換<%= ENV["SECRET_KEY_BASE"] %>控制檯。
然後,一切正常,應用程序在生產環境中運行良好。
我不想在secret.yml中保密,我不知道如何糾正這個或我做錯了什麼。
有沒有人有任何建議?secrets.yml環境變量不能在Rails中工作4.1.4

回答

-1

你可以把這個祕密基地/config/initializes/secret_token.rb:

SampleApp::Application.config.secret_key_base = 'Your_Base_here' 

編輯: 這是一種勸阻在許多情況下,這樣編輯.ENV文件,並設置您的主要基地:

SECRET_KEY_BASE=Your_base_here 

,並把你的secrets.yml回:

<%= ENV["SECRET_KEY_BASE"] %> 

你可能會改變原生使用/config/initializes/secret_token.rb:

SampleApp::Application.config.secret_token = ENV['SECRET_TOKEN'] 

這會給你相同的結果,更安全。 如果您然後在推動這Heroku的規劃:

heroku config:set SECRET_KEY_BASE=$SECRET_KEY_BASE 
0

在生產中的〜/ .bashrc可能讀不出來 - 比如,你運行作爲不同的用戶,nginx的可能不是在開始之前讀的〜/ .bashrc,等Lots of people遇到這個問題。

一個常見的方法是處理像Rails處理數據庫配置的環境配置。創建一個配置/ 東西 .yml文件與設置爲每個環境,然後閱讀yaml在配置/初始化/ 東西 .rb初始值設定項,並使用特定環境的值。 rails_configfigaro寶石自動化這種方法。我經常只是沒有寶石就做到了,因爲它不是非常困難。和database.yml一樣,關鍵在於你永遠不想檢查這個到源代碼控制 - 在git中使用.gitignore。

如果你想堅持使用環境變量來設置你的密鑰庫,那麼你怎麼做取決於你的生產機器,以及如何配置它並部署你的代碼。使用Heroku,只需彈出Heroku控制檯並進行設置即可。對於其他情況,您可以使用Chef/Puppet/Ansible等設置服務器的環境變量。另一種方法是使用Capistrano推送該信息。