我觉得这个问题一定是过去已经回答的问题,但我找不到任何关于谷歌的问题。
根据Rails指南:
通过重播整个迁移历史记录,无需(并且容易出错)部署应用程序的新实例。将数据库加载到当前模式的描述中要简单得多,速度更快。
但是,当您通过模式文件加载数据库时,PROXY_IP:PORT
表中没有数据,因此如果没有首先运行整个迁移历史记录,将来无法运行任何添加到项目中的迁移
我在这里遗漏了什么吗?如果我从模式文件创建Rails DB的新实例,我该如何运行任何针对它的迁移?
答案 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:dump
或rake 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