轨上现有的用户模型4红宝石2.00设计迁移失败(Rails 4 Ruby 2.00 Devise m

2019-10-19 07:34发布

我试图设计添加到基于恩基应用与Omniauth已经实现,现有的用户模型。 以下github上设计教程,并试图在这里或在设计维基贴出几乎每一个可能的解决方案之后,我仍然不能得到移植到run.I得到这个错误,运行耙分贝时,我得到:迁移。 我知道我需要注释掉email列(它存在于用户模式)。 我试图注释掉取其扔“已经存在”的错误,但也不能工作。

$ rake db:migrate
==  AddDeviseToUsers: migrating ===============================================
-- change_table(:users)
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "encrypted_password" of relation "users" already exists
: ALTER TABLE "users" ADD COLUMN "encrypted_password" character varying(255) DEFAULT '' NOT NULL/Users/josecfernandezortiz/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `async_exec'

这是当前模式:

  create_table "users", force: true do |t|
    t.string   "name",           null: false
    t.string   "email",          null: false
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "provider"
    t.string   "uid"
    t.string   "role"
    t.datetime "last_logged_in"
  end

这是由设计所产生的迁移:

class AddDeviseToUsers < ActiveRecord::Migration
  def self.up
    change_table(:users) do |t|
      ## Database authenticatable
      # t.string :email,              :null => false, :default => ""
      t.string :encrypted_password, :null => false, :default => ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, :default => 0, :null => false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      # Uncomment below if timestamps were not included in your original model.
      # t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
  end

  def self.down
    # By default, we don't want to make any assumption about how to roll back a migration when your
    # model already existed. Please edit below which fields you would like to remove in this migration.
    raise ActiveRecord::IrreversibleMigration
  end
end

我也试着注释掉t.string :encrypted_password, :null => false, :default => ""同样的结果。 谢谢!

Answer 1:

schema.rb文件将只包含与通过特定项目的移民所做的更改架构信息。 所以,如果你添加迁移的塔外,架构也不会反映这一点。 我冒昧地猜测,你可能已经使用相同的名称添加设计或部分/全部在之前的项目中使用的设计这些列的,在桌子上。

你可以做任何以下内容:

1)检查用户,并确认如果是这样的话,如果它要么是一个)下降的DB和重建(我认为有可能是你不希望其他问题/表/列)b)拆卸列

您可以删除并重新创建如下:

rake db:drop db:create db:schema:load


文章来源: Rails 4 Ruby 2.00 Devise migration on existing User Model fails