簡體   English   中英

將Devise升級到3.2.3后出現錯誤

[英]Get an error after Devise upgrade to 3.2.3

我執行了包更新,將Rails版本從3.2.13更改為3.2.17 ,提升了其他一些特性,並將Devise版本從1.5.0更改為3.2.3

我修復了一些Devise過時的方法和不兼容問題,並陷入了以下錯誤: uninitialized constant Users (NameError)

源自devise_for :users config/routes.rb devise_for :users路由助手

[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
/home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/activesupport-3.2.17/lib/active_support/inflector/methods.rb:230:in `block in constantize': uninitialized constant Users (NameError)
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/activesupport-3.2.17/lib/active_support/inflector/methods.rb:229:in `each'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/activesupport-3.2.17/lib/active_support/inflector/methods.rb:229:in `constantize'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise.rb:297:in `get'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/mapping.rb:77:in `to'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/mapping.rb:72:in `modules'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/mapping.rb:89:in `routes'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/mapping.rb:156:in `default_used_route'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/mapping.rb:66:in `initialize'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise.rb:331:in `new'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise.rb:331:in `add_mapping'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/rails/routes.rb:221:in `block in devise_for'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/rails/routes.rb:220:in `each'
    from /home/vagrant/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/devise-3.2.3/lib/devise/rails/routes.rb:220:in `devise_for'
    from /var/wannafun/scade-backend/config/routes.rb:10:in `block in <top (required)>'

如何解決?

更新1

我修復了rails並將版本分別設計為3.2.131.5.0 ,然后更新了包(更新了許多gems),仍然遇到相同的錯誤。 我猜想devise和active_support寶石是無辜的。

正如我在Gemfile.lock中看到的,active_support依賴於兩個完全獨立的gem:

activesupport (3.2.13)
  i18n (= 0.6.1)
  multi_json (~> 1.0)

盡管Devise取決於以下寶石:

devise (1.5.0)
  bcrypt-ruby (~> 3.0)
  orm_adapter (~> 0.0.3)
  warden (~> 1.1)
    rack (>= 1.0)

無法想象他們中的哪一個出了什么問題

我開始一個接一個地修復gem版本,並發現一旦我修復了checker gem版本,錯誤就消失了。 我固定檢查器版本之前和之后bundle showbundle show的差異輸出:

30c30
<   * checker (0.6.6)
---
>   * checker (0.6.2)

所以我最終從我的Gemfile中刪除了checker。

不幸的是,我沒有時間研究檢查器影響devise或active_support gems功能的方式。 也許以后。

我猜這是在CoreExt.constantize方法中,該方法重寫(?)相同的ActiveSupport :: Inflector方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM