当前位置: 首页 > 知识库问答 >
问题:

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

易书
2023-03-14
Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

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

为什么我仍然得到这个错误?

共有1个答案

金赤岩
2023-03-14

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

我将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)

经过一些研究,我发现Rails4.1更改了管理secret_key的方式,因此如果您阅读位于examplerailsproject/config/secrets.ymlsecrets.ymlsecrets.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)创建一个环境变量:

>

  • 在生产服务器的终端中执行:

    $ RAILS_ENV=production rake secret
    

    这将返回一个包含字母和数字的大字符串。复制它,我们将该代码称为generated_code

    $ vi /etc/profile
    
    $ export SECRET_KEY_BASE=GENERATED_CODE
    

    保存更改并使用ESC关闭文件,然后使用“:x”和输入保存并在vi中退出。

    但是,如果您以普通用户身份登录,我们将其称为“example_user”以了解以下要点,您将需要找到以下其他文件中的一个:

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

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

    然后再次使用shift+g到文件的底部,并再次使用i使用我们的generated_code写入环境变量,并确保在文件末尾添加新的一行:

    $ export SECRET_KEY_BASE=GENERATED_CODE
    

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

    您可以通过以下命令验证我们的环境变量是否在Linux中设置正确:

    $ printenv | grep SECRET_KEY_BASE
    

    或与:

    $ echo $SECRET_KEY_BASE
    

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

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

  •  类似资料:
    • 我第一次在Heroku上部署我的应用时收到错误“发生了未处理的低级错误”,显示: 缺少“生产”环境,请在中设置此值。 1)默认的指定 应该已经与我的应用程序一起部署,它指定通过生产环境中的环境变量加载机密。 5)我还运行了< code>heroku ps:restart,以防应用程序需要一些额外的帮助来使环境变量设置生效 我读了以前的帖子,但过去的答案似乎是确保< code>secrets.yml

    • 我从头开始创建了一个rails应用程序(Rails 4.1.0 ),但是我遇到了一个我无法解决的问题。我已经安装并配置了Apache乘客模块,它运行良好。每当我尝试访问虚拟主机时,都会收到错误500: secret.yml文件包含以下配置: 即使不被推荐,我还是这样做了: 但阿帕奇日志显示: 如何修复此错误?如何访问开发环境?我的意思是如何编写代码,在浏览器中进行测试,然后部署到Heroku,或者

    • 我将密钥添加到heroku配置变量中,但我仍然得到错误。 这是正确的方法吗?我忽略了秘密。我从其他渠道了解到,把这件事推给公众并不是一个好主意。 在heroku配置变量中: 在secrets.yml 我还做错了什么? 此外,如果我将密钥放入heroku的配置变量中,其他开发人员就不会看到这一点了吗?那么,这还不是一种公众行为吗?我一直想知道这个概念。

    • 我创建了一个rails 4.1.4应用程序,试图在heroku上运行,但我得到以下错误- 缺少环境的

    • 我有ubuntu服务器、Rails 5.0和apache Web服务器,上面还有很多站点。 当我添加新站点时,我收到一个错误“收到来自应用程序的不完整响应” 当我检查apache日志时,我看到消息: 我的配置/机密。yml包含默认值: 另外,我刚刚通过在文件中写入设置了环境变量SECRET_KEY_BASE /etc/profile 我看到than通过命令< code > echo$SECRET

    • 当我导航到Rails生产站点时,我得到: 我看到很多解决这个错误的方法是用生成的长字符串 然而,这对我不起作用(我得到同样的错误)。我必须在< code > config/environments/production . Rb 中包含:< code>config.secret_key_base = "通过运行rake secret生成的长字符串" 来解决这个错误。 我的问题是,这是正确的方法,因

    • 我的情况很像SemiFixed:“production”环境缺少`secret_key_base`: 我的配置/秘密 我在/etc/environment中添加了一个条目,这样当我登录并键入 我得到了我用耙子秘密创建的长串。但是,对于“生产”环境,即使重置了整个计算机,我仍然收到500错误,丢失secret_key_base,在config/secrets.yml中设置此值。那么还有什么可能出错呢

    • 我在windows计算机上使用命令行时出现以下错误:“(Backtrace限制为导入的任务)cap aborted!loaderror:无法加载这样的文件--capistrano/passenger c:/sites/buy/capfile:23:in”“(请参阅使用--trace运行任务的完全跟踪)” gem“Rails”,“4.1.8” 宝石“SQLite3” gem'sass-rails',