[英]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.13
和1.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 show
的bundle 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.