2016-09-28 176 views
5

全新的Rails应用程序。Rails 5 cipher.key“key must be 32 bytes”error

Rails版本5.0.0.1,Ruby版本2.4.0preview2。

创建应用程序“演示”,运行一个简单的支架产生的产品,并获得试图查看支架的概述页面时出现错误(基本索引文件仍然加载欢迎Rails的画面细腻):

引发ArgumentError中的ProductsController #INDEX 密钥必须是32个字节:

cipher = new_cipher 
    cipher.encrypt 
    cipher.key = @secret 

    # Rely on OpenSSL for the initialization vector 
    iv = cipher.random_iv 

问题线显然cipher.key = @secret。

我见过各种提到的GitHub库为Rails提的这个问题,但所有的暗示它现在解决了Rails的5.0.0.1

+0

你确定*关于'5.0.0.1',而不是'5.0.0.0'?我刚刚阅读[此问题](https://github.com/rails/rails/issues/25185)和相关的请求;它看起来像错误已被修复?我会尝试重新创建它,虽然... –

+0

如果我运行'rails -v',我得到'Rails 5.0.0.1',并运行'gem list rails -all'显示刚安装的5.0.0.1 – TheMinimalCriminal

+1

Gemfile列出'gem'rails','〜> 5.0.0','> = 5.0.0.1'' – TheMinimalCriminal

回答

1

试试这个:

rake db:create 
rake db:migrate 

然后,最重要的事情:

bundle update 

这适用于我。

1

终于找到问题!它来自一个错误修正... https://bugs.ruby-lang.org/issues/12561

如果您使用密码例如“AES-256-CFB”的key_len是32,通过发现:

require 'openssl' 
cipher = OpenSSL::Cipher.new('aes-256-cfb') 
cipher.key_len # => 32 

我们曾误以为我们需要发送256个字符的随机数,但实际上你应该送32个字符的随机数 - 或 使用cipher.random_key(内部使用key_len)。它从来没有成为一个问题,因为openssl截断nonce ...但现在你需要发送正确的长时间nonce。

我们得到了这个错误,从2.3.4升级红宝石2.4.2。

0

解决方案

  1. 编辑您的Gemfile
  2. 添加以下行:宝石 '轨道', '〜> 5.0.0', '> = 5.0.0.1'
  3. 捆绑安装
  4. 可选:我正在使用ruby2-4.1。 (rvm install ruby​​-2.4。1)

Rational:5.0.0之前的rails版本似乎有一个导致此问题的错误。该错误已在最新版本的Rails中解决。如果您使用Rails安装指南(http://railsapps.github.io/installrubyonrails-mac.html),则在发布日期之后您可能会遇到此问题。

此修复程序不工作,并通过

0

我太有这个问题,并固定它通过运行

bundle update 

请确保您有最新版本的安装轨验证。

相关问题