【问题标题】:Rails devise error "NoMethodError ... merge"Rails 设计错误“NoMethodError ...合并”
【发布时间】:2014-10-01 00:00:23
【问题描述】:

我试图用设计制作用户模型(到目前为止,在我的应用程序中,制作模型或添加属性没有问题)。我跑了

rails g devise user

创建这个:

  invoke  active_record
  create    db/migrate/20140930235224_devise_create_users.rb
  create    app/models/user.rb
  invoke    test_unit
  create      test/models/user_test.rb
  create      test/fixtures/users.yml
  insert    app/models/user.rb
  route  devise_for :users

然后我尝试运行

rake db:migrate

这给了我以下内容

rake aborted!
NoMethodError: undefined method `merge!' for #<ActionDispatch::Routing::Mapper::Scope:0x9fc73a4>
/home/user/Desktop/MyApp/config/routes.rb:2:in `block in <top (required)>'
/home/user/Desktop/MyApp/config/routes.rb:1:in `<top (required)>'
/home/user/Desktop/MyApp/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

可能是什么问题?

路线的第 2 行是:

devise_for :users

环境的第 5 行是:

Rails.application.initialize!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 devise rubygems


    【解决方案1】:

    通过运行检查您安装的设计版本:

    bundle show devise
    

    使用最新版本的 Rails 4.2.0,设计需要升级到 3.4.0 或更高版本。为此,请在您的 Gemfile 中指定:

    gem 'devise', '~> 3.4.0'
    

    然后运行:

    bundle update devise
    

    【讨论】:

    • 谢谢!在他们合并此修复程序之前,我的设计已经过时了。
    【解决方案2】:

    看起来这可能是 Devise 和最新版本的 Rails 的问题。在 Devise Github 上查看这些问题:

    这个blog post 解释说有一个带有修复的分支,但是,如果您要在生产中使用它,您可能应该等到设计将修复合并到 master 中。

    【讨论】:

    • 谢谢,同时我应该把我的 gem 列表从这个:gem 'devise','~> 3.3.0' 切换到这个:gem 'devise','~> 3.3.0' , :git => 'github.com/plataformatec/devise.git', :branch => 'lm-rails-4-2'
    • 是的,试一试,它应该可以解决问题。记得在上线之前把它换回来。
    • 这些问题现已关闭,最新版本的设计不再存在此问题。
    【解决方案3】:

    在我的 Gemfile 中将 devise 的版本从 3.3.0 更新到 3.4.0 并运行 bundle update devise 对我来说就像魔术一样。我正在运行 rails 4.2.0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多