【问题标题】:getting error from devise "User does not respond to 'devise' method" when running "rails generate devise:install"运行“rails generate devise:install”时,从设计“用户不响应'设计'方法”得到错误
【发布时间】:2012-02-12 08:04:05
【问题描述】:

运行“rails generate devise:install”时,我收到来自设计的错误“用户不响应 'devise' 方法”。想法如何解决?

实际上,在尝试运行我刚才提到的“rails generate devise:install”时也会出现此错误。

注意事项:

Gregs-MacBook-Pro:testapp greg$ rails generate devise:install
/Library/Ruby/Gems/1.8/gems/devise-2.0.1/lib/devise/rails/routes.rb:406:in `raise_no_devise_method_error!': User does not respond to 'devise' method. This usually means you haven't loaded your ORM file or it's being loaded too late. To fix it, be sure to require 'devise/orm/YOUR_ORM' inside 'config/initializers/devise.rb' or before your application definition in 'config/application.rb' (RuntimeError)
    from /Library/Ruby/Gems/1.8/gems/devise-2.0.1/lib/devise/rails/routes.rb:207:in `devise_for'
    from /Library/Ruby/Gems/1.8/gems/devise-2.0.1/lib/devise/rails/routes.rb:203:in `each'
    from /Library/Ruby/Gems/1.8/gems/devise-2.0.1/lib/devise/rails/routes.rb:203:in `devise_for'
    from /Users/greg/source_rails/testapp/config/routes.rb:2
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.2.1/lib/action_dispatch/routing/route_set.rb:272:in `instance_exec'
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.2.1/lib/action_dispatch/routing/route_set.rb:272:in `eval_block'
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.2.1/lib/action_dispatch/routing/route_set.rb:249:in `draw'

Gregs-MacBook-Pro:testapp greg$ ruby -v 
**ruby 1.8.7** (2010-01-10 patchlevel 249) [universal-darwin11.0]

Gregs-MacBook-Pro:testapp greg$ rails -v
**Rails 3.2.1**

Gregs-MacBook-Pro:testapp greg$ gem list

*** LOCAL GEMS ***

actionmailer (3.2.1)
actionpack (3.2.1)
activemodel (3.2.1)
activerecord (3.2.1)
activeresource (3.2.1)
activesupport (3.2.1)
addressable (2.2.6)
arel (3.0.0)
bcrypt-ruby (3.0.1)
builder (3.0.0)
bundler (1.0.22)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
devise (2.0.1)
erubis (2.7.0)
execjs (1.3.0)
faraday (0.7.6)
hike (1.2.1)
i18n (0.6.0)
journey (1.0.1)
jquery-rails (2.0.0)
json (1.6.5)
mail (2.4.1)
mime-types (1.17.2)
multi_json (1.0.4)
multipart-post (1.1.4)
mysql (2.8.1)
mysql2 (0.3.11)
oauth (0.4.5)
oauth-plugin (0.4.0.rc2)
oauth2 (0.5.2)
orm_adapter (0.0.6)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.1)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.1)
railties (3.2.1)
rake (0.9.2.2)
rdoc (3.12)
rubygems-update (1.8.15)
sass (3.1.15, 3.1.14)
sass-rails (3.2.4)
sprockets (2.1.2)
sqlite3 (1.3.5)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
tzinfo (0.3.31)
uglifier (1.2.3)
warden (1.1.0)

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 devise


    【解决方案1】:

    听起来您已经在 User 模型中调用了 devise 方法。也许你已经跑了 rails g devise User

    将其注释掉,并在路由文件中注释掉 devise_for :users 行(如果存在)。

    【讨论】:

    • tks - 这似乎解决了它 - 有什么问题? - 我是否以错误的顺序发出命令并以某种方式搞砸了?我现在假设我必须再次取消注释这些行? (我上面的命令是:“rails generate devise:install”、“rails generate devise User”和“rake db:migrate”。
    • @greg - 运行 rails g devise:install 在文件 config/initializers/devise.rb 中放置一个用于设计的初始化程序。这就是加载所有设计方法的内容,以便您的应用程序可以使用它们。如果您在初始化程序到位之前运行rails g devise User,那么您的 User 模型包含对应用程序不知道的方法的调用。因此,每当您运行任何 rails 命令时,它都会失败,因为......好吧,您遇到的错误。如果您尝试运行 rails serverrails c 或其他任何方式,它也会失败。
    • @greg 是的,您只是以错误的顺序运行命令。首先运行“rails generate devise:install”。
    • 如果我先运行rails g devise User,我会遇到同样的问题。如果我在路由文件中注释掉devise_for :users,那么我可以成功运行rake db:migrate...我想知道我是否将我的devise_for :users 永久注释掉还是可以取消注释?
    • @leggooo 您可以在运行迁移后取消注释。
    【解决方案2】:

    完成 Rails 教程和这些答案对我不起作用,但经过一番搜索后找到了解决方案。希望这对遇到此问题的新手有所帮助。

    1. 转到:config/routes.rb文件
    2. 注释掉devise_for :installs这一行(在前面放一个井号标签)
    3. 转到您的 Ruby 终端并重新输入:rails generate devise:install

    现在 Devise 应该可以正确安装并且后续的错误应该消失了。

    Source

    【讨论】:

      【解决方案3】:

      对于因以下错误到达这里的人:

      用户没有响应“设计”方法。这通常意味着您 尚未加载您的 ORM 文件或加载得太晚。要解决这个问题, 一定要在里面要求'设计/orm/YOUR_ORM' 'config/initializers/devise.rb' 或在您的应用程序定义之前 在 'config/application.rb' (RuntimeError)

      但是您已经正确初始化了 ORM,它可能与 gem 相关。我在旧应用程序上遇到了同样的问题,这是由于与 active_reload gem 不兼容。 gem active_reload 与 Rails 3.2 不兼容,应该删除。 active_reload 已被合并到 Rails 3.2 中,因此可以安全删除。

      我从这里得到了解决方案:http://anlek.com/2012/02/user-does-not-respond-to-devise-method/

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。但是对我来说,这是由与 active_reload gem 的冲突引起的。一旦我删除一切都很好。我从https://github.com/plataformatec/devise/issues/1597得到了提示

        【讨论】:

        • 我以为我做到了。我说这是主动重载宝石
        猜你喜欢
        • 2014-09-24
        • 2023-03-12
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多