简体   繁体   中英

Rails database is correct, but schema.rb is not

EDIT: Result of rake db:migrate:reset (schema.rb still appears out of date):

rake db:migrate:reset
== 20160515232901 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0090s
== 20160515232901 CreateUsers: migrated (0.0091s) =============================

== 20160515232934 AddDeviseToUsers: migrating =================================
-- change_table(:users)
   -> 0.0428s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0072s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0057s
== 20160515232934 AddDeviseToUsers: migrated (0.0559s) ========================

== 20160515235141 AddNamesToUsers: migrating ==================================
-- add_column(:users, :first_name, :string)
   -> 0.0006s
-- add_column(:users, :last_name, :string)
   -> 0.0005s
== 20160515235141 AddNamesToUsers: migrated (0.0014s) =========================

== 20160516084432 CreateGoals: migrating ======================================
-- create_table(:goals)
   -> 0.0092s
== 20160516084432 CreateGoals: migrated (0.0108s) =============================

== 20160516084610 CreateAccomplishments: migrating ============================
-- create_table(:accomplishments)
   -> 0.0111s
== 20160516084610 CreateAccomplishments: migrated (0.0114s) ===================

== 20160518210446 CreateFriendships: migrating ================================
-- create_table(:friendships)
   -> 0.0073s
== 20160518210446 CreateFriendships: migrated (0.0074s) =======================

== 20160519203358 CreateImpressions: migrating ================================
-- create_table(:impressions)
   -> 0.0096s
== 20160519203358 CreateImpressions: migrated (0.0096s) =======================

== 20160527144308 AddCompletedStatusToGoals: migrating ========================
-- add_column(:goals, :completed_status, :boolean)
   -> 0.0007s
== 20160527144308 AddCompletedStatusToGoals: migrated (0.0008s) ===============

== 20160528013005 AddDueDateTimeToGoals: migrating ============================
-- add_column(:goals, :due_date_time, :timestamp)
   -> 0.0006s
== 20160528013005 AddDueDateTimeToGoals: migrated (0.0007s) ===================

== 20160601230946 CreateClubs: migrating ======================================
-- create_table(:clubs)
   -> 0.0125s
== 20160601230946 CreateClubs: migrated (0.0127s) =============================

== 20160601231112 CreateMemberships: migrating ================================
-- create_table(:memberships)
   -> 0.0186s
-- add_foreign_key(:memberships, :clubs)
   -> 0.0029s
-- add_foreign_key(:memberships, :users)
   -> 0.0021s
== 20160601231112 CreateMemberships: migrated (0.0239s) =======================

== 20160605124945 AddGoalsToClubs: migrating ==================================
-- add_reference(:clubs, :goal, {:index=>true})
   -> 0.0084s
-- add_foreign_key(:clubs, :goals)
   -> 0.0018s
== 20160605124945 AddGoalsToClubs: migrated (0.0103s) =========================

I recently switched from using sqlite to postgres on an existing rails app. I am not able to update the schema.rb file past the last migration migrated under SQLite. When I complete a rake db:reset, I get this message (suggesting I have created a clubs table and a memberships table, amongst other things):

$ rake db:reset-- enable_extension("plpgsql")
   -> 0.0238s
-- create_table("accomplishments", {:force=>:cascade})
   -> 0.0258s
-- create_table("clubs", {:force=>:cascade})
   -> 0.0233s
-- add_index("clubs", ["goal_id"], {:name=>"index_clubs_on_goal_id", :using=>:btree})
   -> 0.0200s
-- create_table("friendships", {:force=>:cascade})
   -> 0.0172s
-- create_table("goals", {:force=>:cascade})
   -> 0.0219s
-- create_table("impressions", {:force=>:cascade})
   -> 0.0279s
-- create_table("memberships", {:force=>:cascade})
   -> 0.0200s
-- add_index("memberships", ["club_id"], {:name=>"index_memberships_on_club_id", :using=>:btree})
   -> 0.0200s
-- add_index("memberships", ["user_id"], {:name=>"index_memberships_on_user_id", :using=>:btree})
   -> 0.0127s
-- create_table("users", {:force=>:cascade})
   -> 0.0253s
-- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true, :using=>:btree})
   -> 0.0156s
-- add_index("users", ["reset_password_token"], {:name=>"index_users_on_reset_password_token", :unique=>true, :using=>:btree})
   -> 0.0092s
-- add_foreign_key("clubs", "goals")
   -> 0.0060s
-- add_foreign_key("memberships", "clubs")
   -> 0.0054s
-- add_foreign_key("memberships", "users")
   -> 0.0063s
-- initialize_schema_migrations_table()
   -> 0.0359s
-- enable_extension("plpgsql")
   -> 0.0220s
-- create_table("accomplishments", {:force=>:cascade})
   -> 0.0216s
-- create_table("clubs", {:force=>:cascade})
   -> 0.0153s
-- add_index("clubs", ["goal_id"], {:name=>"index_clubs_on_goal_id", :using=>:btree})
   -> 0.0086s
-- create_table("friendships", {:force=>:cascade})
   -> 0.0108s
-- create_table("goals", {:force=>:cascade})
   -> 0.0167s
-- create_table("impressions", {:force=>:cascade})
   -> 0.0125s
-- create_table("memberships", {:force=>:cascade})
   -> 0.0119s
-- add_index("memberships", ["club_id"], {:name=>"index_memberships_on_club_id", :using=>:btree})
   -> 0.0115s
-- add_index("memberships", ["user_id"], {:name=>"index_memberships_on_user_id", :using=>:btree})
   -> 0.0082s
-- create_table("users", {:force=>:cascade})
   -> 0.0154s
-- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true, :using=>:btree})
   -> 0.0111s
-- add_index("users", ["reset_password_token"], {:name=>"index_users_on_reset_password_token", :unique=>true, :using=>:btree})
   -> 0.0175s
-- add_foreign_key("clubs", "goals")
   -> 0.0050s
-- add_foreign_key("memberships", "clubs")
   -> 0.0048s
-- add_foreign_key("memberships", "users")
   -> 0.0041s
-- initialize_schema_migrations_table()
   -> 0.0173s

But my schema.rb file shows an out-of-date timestamp and does not include newer changes (including after db:migrate command):

ActiveRecord::Schema.define(version: 20160516084731) do

  create_table "accomplishments", force: :cascade do |t|
    t.integer  "goal_id"
    t.string   "title"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "friends", force: :cascade do |t|
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "goals", force: :cascade do |t|
    t.integer  "user_id"
    t.string   "title"
    t.text     "description"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

  create_table "users", force: :cascade do |t|
    t.datetime "created_at",                          null: false
    t.datetime "updated_at",                          null: false
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    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"
    t.string   "first_name"
    t.string   "last_name"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true

end

I am using the pg gem and have removed the sqlite gem.

Database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: PA_development
  template: template0
  pool: 5
  username: postgres
  password: password

test:
  adapter: postgresql
  encoding: unicode
  database: PA_test
  template: template0
  pool: 5
  username: postgres
  password: password

How do I update the schema?

编辑:迁移路径的图像

[ROLLBACK] TO THE RESCUE!

In your case, to update your schema file, you need to run rollback first and migrate after that.

rake db:rollback
rake db:migrate

rake db:reset task will drop the database and set it up again. This is functionally equivalent to rake db:drop db:setup . This is not the same as running all the migrations. It will only use the contents of the current db/schema.rb or db/structure.sql file. If a migration can't be rolled back, rake db:reset may not help you.

See this link: http://guides.rubyonrails.org/active_record_migrations.html#resetting-the-database

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM