2013-09-01 51 views
4

我最近問了一個類似的問題,但由於問題已經悄然興起,我決定創建一個新問題 - 我希望這是預期的方法?Rails ENV Variables

已經把我的Rails 4應用的Heroku我不斷收到內部服務器錯誤頁面和錯誤是:

您必須在您的應用程序的配置config.secret_key_base

發生這種情況,因爲我的.gitignore文件有意地包含config/initializers/secret_token.rb

我已經安裝了費加羅寶石,這樣我就可以將我的secret_key_base設置爲環境變量以增加安全性。我已經檢查過Heroku,該鍵已正確設置。

我對secret_token.rb代碼如下:

MyApp::Application.config.secret_key_base = ENV["SECRET_KEY_BASE"] 

不過,我仍然得到同樣的問題。

任何人都可以幫助嗎?

+2

該行代碼永遠不會在heroku上運行,因爲該文件已被忽略 - 它不存在於服務器上。爲什麼你需要對文件進行gitignore?你正在使用ENV,所以沒理由忽略? – house9

+0

是啊謝謝我發現,大約10分鐘後,我發佈了這個哈哈愚蠢的錯誤! – tommyd456

回答

4

您可以在Heroku上設置環境變量: https://devcenter.heroku.com/articles/config-vars

你需要設置SECRET_KEY_BASE環境變量的Heroku使用這個命令:

heroku config:set SECRET_KEY_BASE=value 
+2

我已經運行rake figaro:heroku,它會自動在Heroku上設置這個值 - 正如它在Heroku中提到的問題中提到的那樣,該值存在但我仍然遇到問題 – tommyd456

+0

@ tommyd456可以嘗試連接heroku rails console並檢查該配置: Heroku的運行軌道控制檯 > Rails.config.secret_key_base – xaph

+0

嗨是的,我這樣做,是已經與「Heroku的配置」和SECRET_KEY_BASE環境變量就在那裏 – tommyd456

9

我做了工作,但沒東西simlilar給你」不要使用費加羅。我基於它關閉this blog post

總之,這裏是我所做的:

1)從你的.gitignore

2)使用此代碼爲您secret_token.rb刪除配置/初始化/ secret_token.rb:

MyApp::Application.config.secret_token = if Rails.env.development? or Rails.env.test? 
    ('x' * 30) # meets minimum requirement of 30 chars long 
else 
    ENV['SECRET_TOKEN'] 
end 

3)提交併重新推

4)設置的Heroku ENV variale像:

heroku config:set SECRET_TOKEN=12345..... 

一旦Heroku在配置設置後重新啓動,就開始工作。

0

這可能有助於使用Rails +4.1人:

「當部署一個Rails應用程序4.1+,Heroku的將指定在 您的應用程序默認情況下,SECRET_KEY_BASE。」 (https://blog.heroku.com/container_ready_rails_5

換句話說,你不需要做任何事情。您可以省略.gitignore文件中的secrets.yml(標準版本),而不用擔心丟失任何與生產有關的祕密。