我生成了一个新的rails迁移:
rails generate migration some_new_column_to_table
修改 -
运行迁移:
rake db:migrate
更新了测试数据库:
rake db:test:prepare
意识到我没有在change方法中添加任何东西,然后
更新了迁移文件:
class AddSomeColumnToTable < ActiveRecord::Migration
def change
add_column :table, :some_column, :string
add_index :table, :some_column
end
end
再次进行迁移:
rake db:migrate
更新测试数据库(再次):
rake db:test:prepare
运行这些命令后,“some_column”没有添加到数据库中。我在这里找到了解决这个问题的方法:rake db:migrate is not working
rake db:drop:all
rake db:create:all
rake db:migrate
为什么这样可以解决问题? 我怎么能在将来阻止它?
答案 0 :(得分:1)
目前尚不清楚你的问题是什么。但是你的最后命令确实可以解决问题。
rake db:drop:all << drop the database
rake db:create:all << create the database (not the tables)
rake db:migrate << build up the database based on the migrations
根据我的经验,迁移不会“停止工作”而且它们完全按照布局进行,因为它们只不过是单独的命令。但是,它们要求按顺序执行它们,因此如果您开始编辑迁移,则必须知道迁移是否已运行。迁移问题通常是我们无序编辑它们的结果。最安全的最好方法是不要编辑已经运行的迁移。首先执行以下任何操作:
rake db:rollback << rollback the last migration (you can do this multiple times)
rake db:migrate VERSION=00000 << This will rollback to a specific migration
rake db:rollback STEP=2 << rollback 2 migrations
希望这有用。
答案 1 :(得分:0)
我不能说问题确实存在,但值得一试。
您可能已经搞乱了迁移。
编辑迁移是不安全的,除非在任何计算机上都没有迁移过一次。
例如,假设你创建了一个像你一样添加字段的迁移。然后你意识到这个领域不再需要了,并把它带走了。
但是,如果您已经运行了迁移,它会将该字段留在您的数据库或您的案例中,它将不会添加该字段。
因此,在处理迁移时,请尝试不编辑较旧的迁移。永远创造新的。