如果我编辑我的shema,并运行db:migrate数据库没有更改,但如果我清除版本0,并调用迁移它的工作,但我丢失了所有数据库数据。
怎么了?
答案 0 :(得分:4)
这就是db:migrate
的工作方式。它在数据库中维护一个名为schema_migrations
的表,用于跟踪迁移时间戳(即,如果您的文件被称为20090807152224_create_widgets.rb
,20090807152224
部分是时间戳 - 以及将要被添加到您的schema_migrations
表中。
您不应该手动修改schema.rb
文件 - 该文件会因db:migrate
而自动生成。
rails中的想法是,如果您想对架构进行更改,那么您将生成新的迁移并使用然后运行{ {1}}(因此,会相应地更新db:migrate
文件。)
答案 1 :(得分:0)
当您说您正在更新架构时,这是否意味着您正在更新db / schema.rb文件或实际迁移?
如果您要更新schema.rb文件,则应注意它将无效,因为该文件是自动生成的。
请参阅文件顶部的评论:
# This file is auto-generated from the current state of the database. Instead of editing this file,
# please use the migrations feature of Active Record to incrementally modify your database, and
# then regenerate this schema definition.
答案 2 :(得分:0)
听起来您正在更改迁移文件。
请勿更改迁移文件。添加新的。您可以进行更改的迁移,例如列的类型。有时候更改旧迁移可能会有所帮助,但除非您知道后果,否则不要这样做。正如其他人所提到的,也不要改变架构,但我认为你没有这样做。