26

刚刚使用 Git 将我的第一个应用程序推送到 Heroku 并立即收到内部服务器错误。

您必须在应用的配置中设置 config.secret_key_base。

这是因为在我的 .gitignore 文件中包含以下文件:

配置/初始化程序/secret_token.rb

我正在为我的 .gitignore 文件使用标准模板:https ://github.com/github/gitignore/blob/master/Rails.gitignore

我的问题:我是否应该直接通过 Heroku 设置此密钥以增加安全性,如果可以,如何设置?

或者

我应该从我的 .gitignore 文件中删除这一行吗?

4

3 回答 3

32

除了在 Heroku 上将秘密令牌设置为 ENV 变量(如 Nick Ginanto 所述)之外,您还需要以下内容才能完成这项工作。

config/initializers/secret_token.rb从_.gitignore

将此文件中的行更改为:

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

然后,这将获取您使用 Heroku 的配置变量设置的秘密令牌。

为了在您的本地环境中获取令牌,您需要添加它。这里有许多选项,但最接近 Heroku 的选项是使用foreman gem以及.env项目根目录中的文件。.env遗嘱需要有secret_token

SECRET_TOKEN=NKUd7gisd7fueAISDfg....

您可以使用该rake secret命令生成令牌。确保您的.env文件已添加到.gitignore.

完成所有这些后,您将拥有 Heroku 和本地不同的令牌,并且您的令牌将不在您的源代码管理中。

于 2013-09-02T14:41:42.213 回答
10

将其设置为 Heroku 环境变量,并为开发提供回退

删除硬编码的秘密,将秘密初始化程序检查到版本控制中,在 Heroku 上设置环境变量,并为开发和阶段提供后备。

1. 删除硬编码的秘密,并可选择提供一个回退:

编辑您的 config/initializers/secure_random.rb 以删除硬编码的密码以用于生产。如果您不想更改启动服务器的方式,可以选择包括非生产环境的后备。

secret = Rails.env.production? ? ENV['SECRET_TOKEN'] : "top_secret_token"
YourApp::Application.config.secret_key_base = secret

2. 将 config/initializers/secure_random.rb 检入 git

编辑 .gitignore 并删除该行:

config/initializers/secret_token.rb

现在提交文件。

3.设置Heroku的秘钥

跑:

rake secret

生成一个随机的字母数字字符串。我也喜欢通过手动混合密钥来双重确定,以防万一在密钥生成算法中发现未来的弱点,就像不久前发生在 Debian 上的那样。可能这是不必要的。

下一次运行:

heroku config:set SECRET_TOKEN=paste_random_string_here

将秘密设置为 Heroku 环境变量。部署到 Heroku,你就完成了。

于 2014-02-06T11:03:08.213 回答
6

最好为此使用 ENV 变量。

这样,您可以在需要时快速使所有 cookie 无效,每个环境都有单独的秘密,无需以特殊方式处理文件

heroku config:set SECRET_TOKEN=ertbs45tnsb3aw5bsxdrt54...

如果您复制了应用程序或在 heroku 中设置了另一个应用程序,则每个应用程序都会有自己的 secret_token。在您的本地机器上只需设置相同的变量

于 2013-09-01T09:57:16.080 回答