小编典典

如何解决错误“‘生产’环境缺少‘secret_key_base’”(Rails 4.1)

all

我使用 Rails 4.1 从头开始​​创建了一个 Rails 应用程序,但我遇到了一个我无法解决的奇怪问题。

每次我尝试在 Heroku 上部署我的应用程序时,都会收到错误 500:

Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`

secret.yml文件包含以下配置:

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

在 Heroku 上,我使用命令SECRET_KEY_BASE的结果配置了 ” ” 环境变量rake secret。如果我启动heroku config,我可以看到具有正确名称和值的变量。

为什么我仍然收到此错误?


阅读 79

收藏
2022-08-03

共1个答案

小编典典

我遇到了同样的问题,并通过创建一个环境变量来解决它,每次我登录到生产服务器时都要加载它,并制作了一个配置它的步骤的迷你指南:

我将 Rails 4.1 与 Unicorn v4.8.2
一起使用,当我尝试部署我的应用程序时,它没有正确启动,在unicorn.log文件中我发现了以下错误消息:

app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)

secret_key经过一番研究,我发现 Rails 4.1
改变了secrets.yml管理exampleRailsProject/config/secrets.yml.

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

这意味着 Rails 建议您secret_key_base在生产服务器中使用环境变量。为了解决此错误,您应该按照以下步骤在生产服务器中为
Linux(在我的情况下为 Ubuntu)创建环境变量:

  1. 在生产服务器的终端中执行:
    $ RAILS_ENV=production rake secret
    

这将返回一个带有字母和数字的大字符串。复制它,我们将该代码称为GENERATED_CODE.

  1. 登录到您的服务器

    • 如果您以 root 用户身份登录,请找到此文件并进行编辑:
          $ vi /etc/profile
      

在 vi 中使用Shift+ (大写“G”)转到文件底部。G

用 写你的环境变量GENERATED_CODE,按i在 vi 中插入。确保在文件末尾换行:

            $ export SECRET_KEY_BASE=GENERATED_CODE

保存更改并使用“ ”关闭文件Esc,然后在 vi 中保存并退出。:x``Enter

* 但是,如果您以普通用户身份登录,我们将其称为“ `example_user`”作为此要点,您将需要找到以下其他文件之一:

            $ vi ~/.bash_profile
    $ vi ~/.bash_login
    $ vi ~/.profile

这些文件按重要性排序,这意味着如果您拥有第一个文件,则无需编辑其他文件。如果你在你的目录中找到了这两个文件,~/.bash_profile~/.profile只需要写入第一个~/.bash_profile,因为
Linux 将只读取这个,而另一个将被忽略。

Shift然后我们再次使用+进入文件底部,再次使用我们的using
G写入环境变量,并确保在文件末尾添加一个新行:GENERATED_CODE``i

            $ export SECRET_KEY_BASE=GENERATED_CODE

编写代码后,保存更改并Esc再次使用“ :x”关闭文件并Enter保存并退出。

  1. 您可以使用以下命令验证我们的环境变量是否在 Linux 中正确设置:
    $ printenv | grep SECRET_KEY_BASE
    

或与:

    $ echo $SECRET_KEY_BASE

当您执行此命令时,如果一切正常,它将显示您GENERATED_CODE之前的状态。最后,完成所有配置后,您应该能够使用 Unicorn
或其他工具毫无问题地部署 Rails 应用程序。

当您关闭 shell 并再次登录到生产服务器时,您将设置此环境变量并准备好使用它。

就是这样!我希望这个迷你指南可以帮助您解决这个错误。

免责声明:我不是 Linux 或 Rails 专家,所以如果您发现有问题或任何错误,我将很乐意修复它。

2022-08-03