运行 我的应用程序在生产中时缺少秘密令牌、秘密密钥库

Missing secret token, secret key base when running my application in production

我使用 Rails 4 和 Ruby 2.1,抱歉,我正在使用 Windows

我读了很多关于这个话题的文章"Missing secret token, secret key base",但实际上我什么都不懂。

我不使用 Heroku、Git、Puma、Passenger 或我读过的所有其他内容。我只是想我可以像往常一样 运行ning rails s 运行 rails s -e production 并查看我的生产中的 Web 应用程序的版本。

但是我有错误"Missing secret_token and secret_key_base for production environment, set these values in config/secrets.yml"

我阅读了有关使用 openSSL 的解决方案,export SECRET_KEY_BASE=<the long string> 但我理解这些解决方案。

我认为这是与密码连接系统相关的问题,感谢 Micheal Hartl 的 Rails 教程,我解决了这个问题。所以禁用了 SSL 连接。但是什么都没有改变。

这是我的 config/secrets.yml :

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

谁能解释一下如何具体解决这个问题?

在您的命令提示符下,运行: bundle exec rake 秘密

它将生成一长串字符。复制此字符串并将其粘贴到 config/secrets.yml 中,如下所示:

production:
  secret_key_base: <paste the string here>

注意:仅当您不使用 public 存储库时才执行此操作。其他任何人都不应访问此密钥。另一种更安全的方法是使用环境变量。看到这个:http://daniel.fone.net.nz/blog/2013/05/20/a-better-way-to-manage-the-rails-secret-token/

因此,如果您查看 secrets.yml 文件,您将看到为每个环境设置 secret_key_base 的位置。当您查看生产设置时,它需要一个环境变量来初始化您的 secret_key_base。通常,在生产中,您会希望您的应用服务器从一般位置获取值,以防您需要启动多个服务器,您不必在任何地方都对 secret_key_base 进行硬编码,因为那不是设置该变量的安全方法。

基本上,您必须在将 运行 您的 rails 应用投入生产的机器上设置环境变量。有很多不同的方法可以设置它。

我为生产环境初始化 ENV 变量所设置的是一个单独的 yml 文件,其构造如下

# config/env_provider.yml
production:
  SECRET_KEY_BASE: "KEY GOES HERE"
  other_production_variables: #...etc

然后我的单独的服务器将被告知在初始化变量之前在哪里可以找到这个文件(这没有签入版本控制)。文件就位后,它将知道在您的应用程序初始化

之前从 environment.rb 中的以下代码初始化变量
#config/environment.rb
YAML.load_file("#{::Rails.root}/config/env_provider.yml")[::Rails.env].each {|k,v| ENV[k] = v }
# This is before Rails.application.initialize!

此设置的作用是确保您不会让每个人都可以看到此文件,只允许您的应用程序服务器使用它。无论如何,这就是我处理 ENV 变量并将它们部署到生产环境的方式。希望对你有帮助。

GDMN 很抱歉大家给了你如此糟糕的解释和指示。那好吧,我们……

首先大家都说得对,您不再需要 "secret_token",但是您确实需要 "secret_key_base"。这样做的目的是保护您的访问者连接并使您的系统和应用程序更加安全。这是一个简单的解释,但您需要为初学者担心。

其次,ENV 代表 "Environment Variable" 它们在所有操作系统中都使用,它们指的是 OS 级别的变量,这些变量包含您不希望其他人访问的信息访问您的网站。例如在 Ruby 在 Rails 中,如果你对 secrety_token_base string/hash 进行硬编码,那么我的黑客可以通过使用你的 security_token 来对付你。我已经看到这种情况发生了,它并不漂亮,如果个人足够熟练,那么他们甚至可以访问您的 root/admin 帐户。

现在开始全部设置。我只知道 linux 方法,我知道您正在寻找 windows 方法,但这至少应该让您了解如何查找与您的操作系统相关的信息。

您需要做的第一件事是通过 运行ning

生成您的 secret_token_base
bundle exec rake secret

据我所知,这是您在所有操作系统中执行此操作的方式。在您 运行 上面的命令之后,控制台将 return 一个字符串,您需要复制它。复制后,您将 运行 以下命令:

export SECRET_KEY_BASE=WhatYouJustCopied

然后我们将检查以确保环境变量 SECRET_KEY_BASE 是由 运行ning 设置的:

env | grep -E "SECRET_TOKEN|SECRET_KEY_BASE"

如果您没有设置 SECRET_TOKEN,您只会得到 KEY_BASE。

如果您想了解更深入的信息,请访问此 link 它可能有点过时,但大部分内容仍然相关,并且在概念上是相同的。 祝你在新发现的 ROR 冒险中好运!一旦掌握了它,它就会很有趣!