资产预编译引发错误时,rails 5.2.2必须为16个字节

时间:2019-01-06 17:55:19

标签: ruby-on-rails ruby-on-rails-5 ruby-on-rails-5.2

我将我的密钥存储在环境中,并且/config/environments/production.rb具有config.require_master_key = true,未注释

    [Authorize(Policy = Policies.RequireAdministrator)]
    [HttpPost("execute")]
    public async Task<IActionResult> ExecuteOperation([FromBody] CommandModel model)
    {
        ...
    }

运行时

config.require_master_key = true

我得到了错误

RAILS_ENV=production bundle exec rake assets:precompile

有关如何解决此错误的任何想法?我还能做什么?

3 个答案:

答案 0 :(得分:1)

在生产环境中的Ubuntu上设置Rails 6.0应用程序时,我遇到了同样的问题。

我正在使用figaro宝石作为环境变量。

问题是我正在复制secret_key_base的内容,而不是master_key

这是我解决的方式

删除先前的master.keycredentials.yml.enc文件

重新创建新的master.keycredentials.yml.enc

rails credentials:edit

OR

EDITOR="code --wait" bin/rails credentials:edit  # If you want to use VS Code as your editor

复制master.key的内容,其格式如下:

34d3cc7c5305dde06865acfa473716cd

在生产环境中用master_key替换我的RAILS_MASTER_KEY值:

RAILS_MASTER_KEY: "34d3cc7c5305dde06865acfa473716cd"

然后保存它。

注意:如果您在RAILS_MASTER_KEY文件(.env,{{1 }},.env.env.development)。假设您只想暂时将其用作占位符。如果您尝试使用.env.test.env.production

生成新的key=': key must be 16 bytes (ArgumentError)master.key文件,这也可能引发错误credentials.yml.enc

您需要做的是在rails credentials:edit文件中提供正确的EDITOR="code --wait" bin/rails credentials:edit环境变量,或者在不使用环境变量的情况下注释掉RAILS_MASTER_KEY环境变量。

就是这样。

我希望这会有所帮助

答案 1 :(得分:0)

您的问题是您生成的密钥比Rails期望的密钥更长https://github.com/rails/rails/issues/33528#issuecomment-412677795

解决方案

您可以通过删除master.key和凭据.yml.enc并运行来重新创建一个新的

rails credentials:edit

答案 2 :(得分:0)

对我来说,我必须确保删除 .env 文件中密钥周围的引号。

我的服务器(AWS ECS Fargate)似乎将 "" 作为密钥的一部分。在当地一切都很好。

之前

RAILS_MASTER_KEY="12345"

之后

RAILS_MASTER_KEY=12345