Ruby-on-rails `method_missing':用户未定义的方法`devise'(调用'User.connection'建立连接)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24196258/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 23:41:58  来源:igfitidea点击:

`method_missing': undefined method `devise' for User (call 'User.connection' to establish a connection)

ruby-on-railsdevise

提问by Bot

I am new to Ruby on Rails and am trying to make my first application. I am having issues though anytime I run any rails generatecommand. I get the following error

我是 Ruby on Rails 的新手,正在尝试制作我的第一个应用程序。尽管我在运行任何rails generate命令时都遇到了问题。我收到以下错误

MyUsers-MacBook-Pro:MyApp MyUser$ rails generate devise:install
Warning: Running `gem pristine --all` to regenerate your installed gemspecs (and deleting then reinstalling your bundle if you use bundle --path) will improve the startup performance of Spring.
/Users/MyUser/.gem/ruby/2.0.0/gems/activerecord-4.1.2.rc1/lib/active_record/dynamic_matchers.rb:26:in `method_missing': undefined method `devise' for User (call 'User.connection' to establish a connection):Class (NoMethodError)
    from /Users/MyUser/.Trash/MyApp/app/models/user.rb:4:in `<class:User>'
    from /Users/MyUser/.Trash/MyApp/app/models/user.rb:1:in `<top (required)>'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:443:in `load'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:443:in `block in load_file'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:633:in `new_constants_in'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:442:in `load_file'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:342:in `require_or_load'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:480:in `load_missing_constant'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:180:in `const_missing'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/inflector/methods.rb:238:in `const_get'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/inflector/methods.rb:238:in `block in constantize'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/inflector/methods.rb:236:in `each'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/inflector/methods.rb:236:in `inject'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/inflector/methods.rb:236:in `constantize'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:552:in `get'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:583:in `constantize'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise.rb:297:in `get'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/mapping.rb:77:in `to'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/mapping.rb:72:in `modules'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/mapping.rb:89:in `routes'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/mapping.rb:156:in `default_used_route'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/mapping.rb:66:in `initialize'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise.rb:331:in `new'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise.rb:331:in `add_mapping'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/rails/routes.rb:221:in `block in devise_for'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/rails/routes.rb:220:in `each'
    from /Library/Ruby/Gems/2.0.0/gems/devise-3.2.4/lib/devise/rails/routes.rb:220:in `devise_for'
    from /Users/MyUser/.Trash/MyApp/config/routes.rb:2:in `block in <top (required)>'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:337:in `instance_exec'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:337:in `eval_block'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/actionpack-4.1.2.rc1/lib/action_dispatch/routing/route_set.rb:315:in `draw'
    from /Users/MyUser/.Trash/MyApp/config/routes.rb:1:in `<top (required)>'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:241:in `load'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:241:in `block in load'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:241:in `load'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:40:in `each'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:40:in `load_paths'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:16:in `reload!'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:26:in `block in updater'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/file_update_checker.rb:75:in `call'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/file_update_checker.rb:75:in `execute'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:27:in `updater'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application/finisher.rb:71:in `block in <module:Finisher>'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/initializable.rb:30:in `instance_exec'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/initializable.rb:30:in `run'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:180:in `each'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/initializable.rb:54:in `run_initializers'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/railties-4.1.2.rc1/lib/rails/application.rb:300:in `initialize!'
    from /Users/MyUser/.Trash/MyApp/config/environment.rb:5:in `<top (required)>'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:247:in `require'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:247:in `block in require'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
    from /Users/MyUser/.gem/ruby/2.0.0/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:247:in `require'
    from /Library/Ruby/Gems/2.0.0/gems/spring-1.1.3/lib/spring/application.rb:92:in `preload'
    from /Library/Ruby/Gems/2.0.0/gems/spring-1.1.3/lib/spring/application.rb:140:in `serve'
    from /Library/Ruby/Gems/2.0.0/gems/spring-1.1.3/lib/spring/application.rb:128:in `block in run'
    from /Library/Ruby/Gems/2.0.0/gems/spring-1.1.3/lib/spring/application.rb:122:in `loop'
    from /Library/Ruby/Gems/2.0.0/gems/spring-1.1.3/lib/spring/application.rb:122:in `run'
    from /Library/Ruby/Gems/2.0.0/gems/spring-1.1.3/lib/spring/application/boot.rb:18:in `<top (required)>'
    from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

Even if I don't add the gem 'devise'into my Gemfile I still get that error. I even created a new application and get that error.

即使我不将它添加gem 'devise'到我的 Gemfile 中,我仍然会收到该错误。我什至创建了一个新应用程序并收到该错误。

I have even tried the answers at undefined method 'devise' for User

我什至在未定义的方法“设计”中为用户尝试了答案

Any idea how I can get rid of this error?

知道如何摆脱这个错误吗?

EDITI currently do not have any models enter image description here

编辑我目前没有任何模型 在此处输入图片说明

回答by itsnikolay

This happens because you missed the command:

发生这种情况是因为您错过了命令:

rails generate devise:install

You need just comment all devise lines temporally (in routes.rb / user.rb) to not get raise.
And run command again.

你只需要临时评论所有设计行(在 routes.rb / user.rb 中)就不会被加薪。
并再次运行命令。

回答by Tom

This is the appropriate Order.

这是适当的顺序。

gem 'devise'
Run the bundle command to install it.
rails generate devise:install
rails generate devise MODEL

Here Model was created before the "rails generate devise:install".So you have to go back an comment everything that model created :

这里模型是在“rails generate devise:install”之前创建的。所以你必须回到模型创建的所有内容的评论:

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
#devise :database_authenticatable, :registerable,
#:recoverable, :rememberable, :trackable, :validatable
end

and also this

还有这个

Rails.application.routes.draw do
#devise_for :users
end

Now,Run "rails generate devise:install" and after that uncomment the above .

现在,运行“rails generate devise:install”,然后取消注释上面的 .

回答by GSP

I ran into a similar problem with an existing project freshly checked out from a repo:

我在从 repo 新签出的现有项目中遇到了类似的问题:

The specific missing files were:

具体丢失的文件是:

config/initializers/devise.rb 
config/locales/devise.en.yml

In this case, because the devise.rbwas in the .gitignorelist there was a config/initializers/devise.rb.examplefile that could be copied over.

在这种情况下,因为devise.rb.gitignore列表中有一个config/initializers/devise.rb.example可以复制的文件。

回答by Arta

Or, like me, after adding:

或者,像我一样,在添加:

gem 'devise'

to Gemfile, and running:

到 Gemfile,然后运行:

$ bundle install

you forgot to restart the serverwith CtrlCand:

您忘记使用和重新启动服务器CtrlC

$ rails s

回答by Srikiran Sistla

This is a little weird issue which I too ran into! Try to add extend Devise::Modelsin app/models/install.rb file as explained in the below link.

这是我也遇到的一个有点奇怪的问题!尝试添加extend Devise::Modelsapp/models/install.rb 文件,如以下链接中所述。

Hope this helps! https://github.com/plataformatec/devise/issues/3877

希望这可以帮助! https://github.com/plataformatec/devise/issues/3877

回答by Steven

rails g devise install!= rails g devise:install

rails g devise install!= rails g devise:install

I ran into this problem as well. Executing rails generate devise install(sic!) there was nothing that seemed not to have worked. The terminal output was:

我也遇到了这个问题。执行rails generate devise install(原文如此!)似乎没有任何效果。终端输出是:

$ rails g devise install
  Running via Spring preloader in process 5422
      invoke  active_record
      create    db/migrate/20180306165306_devise_create_installs.rb
      create    app/models/install.rb
      insert    app/models/install.rb
       route  devise_for :installs

But I missed the semicolon. Reverting these changes and then executing rails generate devise:install(note the :between deviseand install), everything worked out perfectly. Also you get a much more extensive output:

我错过了分号。还原这些更改,然后执行rails generate devise:install(注意:之间deviseinstall),一切工作完美。您还可以获得更广泛的输出:

$ rails g devise:install
  Running via Spring preloader in process 5218
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
  ===============================================================================

  Some setup you must do manually if you haven't yet:

    1. Ensure you have defined default url options in your environments files. Here
       is an example of default_url_options appropriate for a development environment
       in config/environments/development.rb:

         config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

       In production, :host should be set to the actual host of your application.

    2. Ensure you have defined root_url to *something* in your config/routes.rb.
       For example:

         root to: "home#index"

    3. Ensure you have flash messages in app/views/layouts/application.html.erb.
       For example:

         <p class="notice"><%= notice %></p>
         <p class="alert"><%= alert %></p>

    4. You can copy Devise views (for customization) to your app by running:

         rails g devise:views

  ===============================================================================