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

生产中未识别rails secret_key_base

孙海
2023-03-14

所以我正在尝试在生产中部署我的rails应用程序。当我转到该页面时,我收到500错误。当我转到我的错误日志时,我收到以下错误:

Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 

我正在运行Rails 4.1和我的配置/机密。yml看起来是这样的:

    development:
      secret_key_base: <development key>        
    test:
      secret_key_base: <test key>

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

我运行耙子秘密以获取密钥,并将导出放在我的bash_profile中并采购它。我成功运行了 rake 资产:预编译。然而,我仍然不断收到这个错误。有什么想法吗?

更新:我试图更新提供的错误消息,以提供稍微好一点的信息....并且消息未更新。然后,我尝试将密钥直接添加到yml文件中,而不是使用环境变量,仍然没有骰子。我在主机上运行,所以我无法重新启动服务器.....但有些事情告诉我,这就是需要做的...

更新2:睡了一整夜之后,这个问题似乎不再是问题。它一定是某种缓存。现在我的问题是,它试图使用我几天前为我的数据库更改的旧配置。如果我弄清楚如何使缓存无效,我会在这里发布它并将其标记为答案。如果其他人知道如何做,请让我知道,我会把它标记为答案。我正在使用HostMonster作为我的托管,并按照他们在网站上拥有的步骤来托管我的铁路应用程序。

共有2个答案

白晋鹏
2023-03-14
  1. 您需要重新启动服务器,因为在配置/环境.rb中调用您的应用程序名称::应用程序初始化!之后,您无法更改设置。
  2. 检查您的yml标记,可能存在一些错误
  3. 可能是您的配置/初始值设定项/secret_token.rb 中存在问题

问题不在于ENV伪散列。如果在ENV中没有这样的密钥,secret_key_base将为零。

施驰
2023-03-14

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

所以我使用 Rails 4.1 与独角兽 v4.8.2,当我尝试部署我的应用程序时,它不能正常启动并进入独角兽.log文件,我发现了此错误消息:

应用错误:缺少“生产”环境secret_key_base,请在配置/机密中设置此值。yml(运行时错误)

经过一点研究,我发现Rails 4.1改变了管理secret_key的方式,因此如果我们阅读秘密。yml文件位于exampleRailsProject/config/secrets。yml(您需要将“exampleRailsProject”替换为您的项目名称)您会发现如下内容:

# 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)。

2.1-现在,如果我们以root用户身份登录到服务器,我们需要找到此文件并将其打开:

$ vi /etc/profile

然后我们转到文件的底部(“SHIFT G”表示VI中的大写字母G)

我们将用我们的GENERATED_CODE编写我们的环境变量(按“i”键写成VI),确保在文件末尾的新行中:

export SECRET_KEY_BASE=GENERATED_CODE

写完代码后,我们保存更改并关闭文件(我们按下“ESC”键,然后写入“:x”和“ENTER”键以保存并退出VI)

2.2但是如果我们以普通用户的身份登录,让我们称之为example_user,我们将需要找到其他文件中的一个:

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

这些文件是按重要性排序的,这意味着如果你有第一个文件,那么你就不需要在其他文件中写入。因此,如果您在目录“~/.bash_profile”和“~/.profile“中找到这两个文件,您只需在第一个文件“~/.ash_proile”中写入,因为linux将只读取这一个文件,而忽略另一个文件。

然后我们转到文件的底部(“SHIFT G”表示VI中的大写字母G)

我们将用我们的GENERATED_CODE编写我们的环境变量(按“i”键写成VI),确保在文件末尾的新行中:

export SECRET_KEY_BASE=GENERATED_CODE

写完代码后,我们保存更改并关闭文件(我们按下“ESC”键,然后写入“:x”和“ENTER”键以保存并退出VI)

3.-我们可以使用以下命令验证我们的环境变量在linux中是否正确设置:

$ printenv | grep SECRET_KEY_BASE

或与:

$ echo $SECRET_KEY_BASE

当您执行此命令时,如果一切正常,它将显示我们之前生成的GENERATED_CODE。最后,完成所有配置后,您可以使用Unicorn或其他软件部署Rails应用程序,而不会出现问题。

现在,当您关闭shell终端并再次登录到正式服时,您将设置此环境变量并准备好使用它。

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

 类似资料:
  • 在运行一个spring-boot服务器时,我在intellij中得到这个错误消息: 当我尝试使用以下命令构建项目文件夹中的项目时,它无法识别maven:mvn spring-boot: run 我通过下载maven解决了这个问题:https://maven.apache.org/install.html并将apache-maven-3.5.3文件夹中的bin文件手动添加到librarys 好像有点

  • 在中,它显示的“非静态方法'getcontext()'不能从静态上下文引用”如何解决,或者我应该调用什么来代替它。

  • 我已经完成了npm安装netlify-cli-g,这是成功安装。我得到以下回应: 已弃用的core-js@2.6.11:core-js@ netlify-cli@2.36.0安装后C:\Users\soyebp\AppData\Roaming\npm\node\u modules\netlify cli节点/脚本/后安装。js 成功!Netlify CLI已安装! 您的设备现在配置为使用Netli

  • 我正在处理一个简单的Springendpoint。我当前的db表sql是: 我的实体包含: 当调用存储库的保存方法时,我得到了错误: 日志的第一行是实体的toString。

  • 我在pom.xml中得到了以下maven配置。Intellij Ultimate 2018.1将skipTest变量突出显示为红色 无法解析符号“跳过测试” 但是为什么呢?这是一个常见的maven环境变量。

  • 我正在尝试使用1.18.2插口jar制作一个简单的插件。然而,它只是说“import org.bukkit.plugin无法解析”。我尝试过重新下载、重新导入等等。我该怎么办?以下是我目前掌握的代码: 以下是错误信息: