Rails composer devise-rails不会让我完成rails db:reset

时间:2017-03-31 20:59:16

标签: ruby-on-rails ruby devise

我使用rails composer工具创建了一个rails devise组合项目,其中包括rails确认。

一切都很好 - 然后我决定要执行rails db:reset

我运行了命令,这是输出:

Andys-MacBook-Pro:myproj andyarmstrong$ rails db:reset
Dropped database 'myproj_development'
Dropped database 'myproj_test'
Created database 'myproj_development'
Created database 'myproj_test'
-- enable_extension("plpgsql")
   -> 0.0419s
-- create_table("users", {:force=>:cascade})
   -> 0.0188s
-- enable_extension("plpgsql")
   -> 0.0305s
-- create_table("users", {:force=>:cascade})
   -> 0.0236s
rails aborted!
NoMethodError: undefined method `confirm!' for #<User:0x007fa47ac1c2a0>
Did you mean?  confirm
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activemodel-5.1.0.rc1/lib/active_model/attribute_methods.rb:432:in `method_missing'
/Users/andyarmstrong/Documents/Personal/myproj/app/services/create_admin_service.rb:6:in `block in call'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/core.rb:339:in `initialize'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/devise-4.2.1/lib/devise/models/confirmable.rb:65:in `initialize'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/inheritance.rb:66:in `new'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/inheritance.rb:66:in `new'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/persistence.rb:50:in `create!'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/relation.rb:156:in `block in create!'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/relation.rb:337:in `scoping'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/relation.rb:156:in `create!'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/relation.rb:227:in `find_or_create_by!'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/querying.rb:6:in `find_or_create_by!'
/Users/andyarmstrong/Documents/Personal/myproj/app/services/create_admin_service.rb:3:in `call'
/Users/andyarmstrong/Documents/Personal/myproj/db/seeds.rb:8:in `<top (required)>'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activesupport-5.1.0.rc1/lib/active_support/dependencies.rb:286:in `load'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activesupport-5.1.0.rc1/lib/active_support/dependencies.rb:286:in `block in load'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activesupport-5.1.0.rc1/lib/active_support/dependencies.rb:258:in `load_dependency'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activesupport-5.1.0.rc1/lib/active_support/dependencies.rb:286:in `load'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/railties-5.1.0.rc1/lib/rails/engine.rb:549:in `load_seed'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/tasks/database_tasks.rb:268:in `load_seed'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/activerecord-5.1.0.rc1/lib/active_record/railties/databases.rake:181:in `block (2 levels) in <top (required)>'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/railties-5.1.0.rc1/lib/rails/commands/rake/rake_command.rb:21:in `block in perform'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/railties-5.1.0.rc1/lib/rails/commands/rake/rake_command.rb:18:in `perform'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/railties-5.1.0.rc1/lib/rails/command.rb:46:in `invoke'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/railties-5.1.0.rc1/lib/rails/commands.rb:16:in `<top (required)>'
/Users/andyarmstrong/Documents/Personal/myproj/bin/rails:9:in `require'
/Users/andyarmstrong/Documents/Personal/myproj/bin/rails:9:in `<top (required)>'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in `load'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in `call'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/lib/spring/client/command.rb:7:in `call'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/lib/spring/client.rb:30:in `run'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/bin/spring:49:in `<top (required)>'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/lib/spring/binstub.rb:31:in `load'
/Users/andyarmstrong/.rvm/gems/ruby-2.4.0@myproj/gems/spring-2.0.1/lib/spring/binstub.rb:31:in `<top (required)>'
/Users/andyarmstrong/Documents/Personal/myproj/bin/spring:15:in `require'
/Users/andyarmstrong/Documents/Personal/myproj/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

通过堆栈跟踪 - 我看到它在db:seeds组件中失败了,在这一行:user = CreateAdminService.new.call。如果我然后进入app / services并打开create_admin_service.rb文件,我们终于可以看到我们的问题:

class CreateAdminService
  def call
    user = User.find_or_create_by!(email: Rails.application.secrets.admin_email) do |user|
        user.password = Rails.application.secrets.admin_password
        user.password_confirmation = Rails.application.secrets.admin_password
        user.confirm!
      end
  end
end

为什么是user.confirm!找不到?这不是意味着成为基础Devise包的一部分吗?作为参考,这是我的用户模型:

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

1 个答案:

答案 0 :(得分:1)

我决定尝试更改这一行:

 user.confirm!

在create_admin_service中只需:

user.confirm

因为设计的确认.rb似乎没有“确认!”作为一种方法。这允许db:reset成功,所以我只能假设这是devise-rails composer确认示例的问题!我在他们的github上提出了一个适当的问题。