【问题标题】:SQLite > PostgreSQL Rails migrationsSQLite > PostgreSQL Rails 迁移
【发布时间】:2014-03-24 11:25:36
【问题描述】:

我正在使用 sqlite 在我的本地主机上进行开发并部署到 heroku 上的 Postgres,其中实时应用程序已经在 heroku 上。

我最近做了很多开发,其中包括几个数据库结构迁移,所以我将 Postgres 实时数据库拉到我的 localhost 以在本地运行迁移以进行测试(并将我的本地数据库交换到 Postgres)。

当我运行 rake db:migrate 时,它​​会尝试从一开始就运行所有迁移,而不仅仅是新的迁移。

rake 如何知道要运行哪些迁移?

【问题讨论】:

  • 有一个名为“schema_migrations”的表,其中包含先前在数据库上运行的每个迁移的条目 - 尝试psql YOUR_DB -c "select * from schema_migrations"

标签: ruby-on-rails sqlite postgresql heroku


【解决方案1】:

当您第一次迁移时,rake 将运行所有迁移。

当您运行 db:migrate 时,rails 将检查数据库中的一个特殊表,其中包含应用于数据库的最后一次迁移的时间戳。然后它将在该日期之后应用所有带有时间戳的迁移,并使用上次迁移的时间戳更新数据库表。因此,每个迁移类只应用于数据库一次。

来源:https://stackoverflow.com/a/6319952/1970061

以前您的数据库不同,即 sqlite,但是当您切换到 postgres 时,您创建了新数据库,因此必须为新数据库创建所有表,因此所有迁移都在运行

【讨论】:

  • 好的,我明白了。因此,如果我从 heroku 导出数据库,我如何只运行最新的迁移?
  • 运行最新的迁移,或所有迁移..你为什么关心?以任何方式运行迁移创建表,那么创建表有什么问题?
  • 我正在将迁移应用到一个已经包含数据的真实实时数据库
  • 你是什么意思..'你已经从heroku中提取了实时数据'?你有 psql 的转储吗?
  • 是的,没错。这是一个大型现场项目,我想在将迁移部署到现场之前对其进行测试。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2016-08-13
  • 2016-11-08
  • 2018-10-13
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多