在db:schema:load之后运行未来的Rails迁移

时间:2016-03-30 15:54:49

标签: ruby-on-rails

我觉得这个问题一定是过去已经回答的问题,但我找不到任何关于谷歌的问题。

根据Rails指南:

  

通过重播整个迁移历史记录,无需(并且容易出错)部署应用程序的新实例。将数据库加载到当前模式的描述中要简单得多,速度更快。

但是,当您通过模式文件加载数据库时,PROXY_IP:PORT表中没有数据,因此如果没有首先运行整个迁移历史记录,将来无法运行任何添加到项目中的迁移

我在这里遗漏了什么吗?如果我从模式文件创建Rails DB的新实例,我该如何运行任何针对它的迁移?

1 个答案:

答案 0 :(得分:1)

最好使用架构加载而不是运行旧迁移来设置新数据库,并且应该期望在运行rake db:schema:load时正确更新schema_migrations表。运行rake db:schema:load时,应根据传递给db / schema.rb文件中version方法的::define密钥对的值填充schema_migrations表。

例如:

ActiveRecord::Schema.define(version: 20161208214643) do
end

应将schema_migrations表更新为版本中列出的迁移。在运行rake db:schema:dumprake db:migrate(调用db:schema:dump)之后,应自动在db / schema.rb文件中填充版本值。这样就可以正常运行任何未来的迁移,如预期的那样。

schema_migrations表中的插入由assume_migrated_upto_version方法处理,如以下文件所示:

https://github.com/rails/rails/blob/5-0-stable/activerecord/lib/active_record/schema.rb#L52 https://github.com/rails/rails/blob/5-0-stable/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb#L1021