Heroku运行rake db:migrate创建与schema.rb不同的db

时间:2015-03-17 23:12:19

标签: ruby-on-rails heroku rake database-schema

我正在尝试将我的应用程序迁移到MySQL数据库ClearDb上的Heroku。运行heroku rake db:migrate后,MySQL工作台中的结果与schema.rb完全不匹配,因此在尝试启动和查看已部署的应用程序时会出现问题。

是否可以重置" heroku迁移命令,以便它实际匹配应用程序schema.rb文件?

运行heroku rake db:migrate

的结果

enter image description here

schema.rb文件:

ActiveRecord::Schema.define(version: 2****************) do

  create_table "business_users", force: true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "password_digest"
    t.string   "remember_token"
    t.boolean  "admin",           default: false, null: false
    t.string   "phoneNum"
    t.integer  "zipCode"
    t.string   "address"
    t.string   "city"
    t.string   "country"
    t.string   "state"
    t.string   "website"
    t.string   "addinfo"
    t.integer  "removed",         default: 0,     null: false
  end

  add_index "business_users", ["city"], name: "index_business_users_on_city", using: :btree
  add_index "business_users", ["email"], name: "index_business_users_on_email", unique: true, using: :btree
  add_index "business_users", ["remember_token"], name: "index_business_users_on_remember_token", using: :btree
  add_index "business_users", ["state"], name: "index_business_users_on_state", using: :btree
  add_index "business_users", ["zipCode"], name: "index_business_users_on_zipCode", using: :btree

  create_table "campaign_categories", force: true do |t|
    t.integer  "campaign_id"
    t.integer  "category_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "campaign_category_metro_bids", force: true do |t|
    t.integer  "campaign_id"
    t.integer  "category_id"
    t.integer  "metro_id"
    t.float    "average_bid_price"
    t.float    "average_placement"
    t.integer  "number_times_user_pulled"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.float    "set_max_bid"
  end

  add_index "campaign_category_metro_bids", ["average_bid_price"], name: "index_campaign_category_metro_bids_on_average_bid_price", using: :btree
  add_index "campaign_category_metro_bids", ["campaign_id"], name: "index_campaign_category_metro_bids_on_campaign_id", using: :btree
  add_index "campaign_category_metro_bids", ["set_max_bid"], name: "index_campaign_category_metro_bids_on_set_max_bid", using: :btree

  create_table "campaign_locations", force: true do |t|
    t.integer  "campaign_id", null: false
    t.integer  "location_id", null: false
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

  create_table "campaign_metros", force: true do |t|
    t.integer  "campaign_id"
    t.integer  "metro_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "campaign_metros", ["campaign_id"], name: "index_campaign_metros_on_campaign_id", using: :btree
  add_index "campaign_metros", ["metro_id"], name: "index_campaign_metros_on_metro_id", using: :btree

  create_table "campaigns", force: true do |t|
    t.integer  "restaurant_id"
    t.string   "name"
    t.float    "bid_price"
    t.float    "budget"
    t.string   "ad_caption"
    t.string   "ad_details"
    t.boolean  "mobile_order",          default: false
    t.boolean  "call_order",            default: false
    t.string   "mobile_site",           default: "0"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "image"
    t.string   "ad_details_fine_print"
    t.boolean  "monday",                default: false
    t.boolean  "tuesday",               default: false
    t.boolean  "wednesday",             default: false
    t.boolean  "thursday",              default: false
    t.boolean  "friday",                default: false
    t.boolean  "saturday",              default: false
    t.boolean  "sunday",                default: false
    t.boolean  "breakfast",             default: false
    t.boolean  "lunch",                 default: false
    t.boolean  "dinner",                default: false
    t.integer  "texts",                 default: 0
    t.integer  "clicks",                default: 0
    t.string   "start_dt"
    t.string   "end_dt"
    t.integer  "get_there",             default: 0
    t.integer  "restaurant_favorited",  default: 0
    t.integer  "user_saves",            default: 0
    t.boolean  "is_active",             default: false
    t.boolean  "removed",               default: false, null: false
  end

  add_index "campaigns", ["restaurant_id"], name: "index_campaigns_on_user_id", using: :btree

  create_table "categories", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.boolean  "active",     default: true, null: false
  end

  create_table "cities", force: true do |t|
    t.string   "city"
    t.string   "state"
    t.integer  "state_id"
    t.string   "city_whole"
    t.float    "latitude"
    t.float    "longitude"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "active",     default: 1, null: false
  end

  create_table "locations", force: true do |t|
    t.integer  "store_number"
    t.string   "address"
    t.string   "state"
    t.integer  "zip"
    t.string   "sit_down"
    t.string   "drive_through"
    t.float    "latitude"
    t.float    "longitude"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "city_name"
    t.integer  "restaurant_id"
    t.integer  "city_id"
    t.integer  "user_set_active", default: 1,     null: false
    t.boolean  "removed",         default: false, null: false
  end

  add_index "locations", ["city_name"], name: "index_locations_on_city", using: :btree
  add_index "locations", ["latitude"], name: "index_locations_on_latitude", using: :btree
  add_index "locations", ["longitude"], name: "index_locations_on_longitude", using: :btree
  add_index "locations", ["restaurant_id"], name: "index_locations_on_user_id", using: :btree
  add_index "locations", ["state"], name: "index_locations_on_state", using: :btree
  add_index "locations", ["store_number"], name: "index_locations_on_store_number", using: :btree

  create_table "metros", force: true do |t|
    t.string   "city"
    t.string   "state"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.float    "latitude"
    t.float    "longitude"
  end

  add_index "metros", ["latitude"], name: "index_metros_on_latitude", using: :btree
  add_index "metros", ["longitude"], name: "index_metros_on_longitude", using: :btree

  create_table "restaurant_menus", force: true do |t|
    t.integer  "restaurant_id"
    t.string   "item_name"
    t.string   "description"
    t.string   "iamge"
    t.integer  "calories"
    t.float    "price"
    t.integer  "period"
    t.integer  "type"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "restaurants", force: true do |t|
    t.string   "name"
    t.string   "email"
    t.integer  "business_user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.boolean  "removed",          default: false, null: false
  end

  create_table "states", force: true do |t|
    t.string   "state"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

2 个答案:

答案 0 :(得分:0)

如果架构优于迁移,则可以使用rake db:schema:load代替。但TBH我会弄清楚为什么两者有分歧......这听起来有点危险。

答案 1 :(得分:0)

删除所有迁移文件。然后使用转储当前数据库结构准备一个大迁移 - 您可以使用execute方法执行此操作。接下来运行测试并检查应用程序是否正在使用从此迁移创建的数据库。如果一切正常,请在不使用schema_migrations表的情况下复制数据。覆盖此表会再次破坏您的迁移。

这是最简单的解决方案(如果您做了很多更改),但最好只添加缺少的迁移并仅使用数据导入转储,而不使用数据库结构。