2016-09-28 174 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 

請確保您有最新版本的安裝軌驗證。

相關問題