【问题标题】:I am missing a migration file我缺少迁移文件
【发布时间】:2012-11-30 21:31:47
【问题描述】:

我可以添加迁移文件,但告诉 Rails 不要在本地运行它吗?我需要该文件供其他人在本地设置应用程序。

【问题讨论】:

  • 我认为这取决于您是否已经运行了迁移。那么您是否曾经拥有它并被删除了?如果是这样,您可以找出该文件的时间戳并将其添加回 db/migrate 文件夹。
  • 这听起来像个黑客。为什么不希望它在本地运行,而是在其他人身上运行来设置?如果您不希望它运行,因为它已经在本地运行,那么这正是迁移的目的(它们仅在需要时运行)。如果您直接修改了表(即从 SQL 提示符),那么下面的解决方案应该可以工作。但如果有一些不同的原因,那么这是一个非常脆弱的解决方案。
  • @TomHarrisonJr 我在本地运行它,但后来原始迁移文件不知何故被删除了......我的一些迁移基本上是一团糟,因为我一直在尝试不同的方法来做同样的事情找到最好的方法。

标签: ruby-on-rails migration


【解决方案1】:

如果你有文件:

db/migrate/20121010100909_modify_table_x.rb

您可以进入您的数据库并运行以下 SQL。

MySQL:

INSERT INTO 'schema_migrations' VALUES ('20121010100909');

PostgreSQL:

INSERT INTO schema_migrations VALUES ('20121010100909');

然后它将忽略该迁移。

编辑 - 如何“进入您的数据库”

在 Rails 中使用来自config/database.yml 的参数,连接到您正在使用的数据库。 您将需要使用您正在使用的任何数据库软件的命令行工具。例如

对于 PostgreSQL:

psql -d <database_name> -U <username>

对于 MySQL:

mysql -u <username> <databasename>@localhost -p

如果需要,请输入您的密码。

然后输入并执行上面的SQL。

【讨论】:

  • 好的,谢谢。当你说“进入你的数据库”时,我是否运行了一个命令来访问数据库?不熟悉,但听起来我应该研究一下。我正在运行 PG。
  • 添加了关于 PostgreSQL 和 MySQL 的指南。
  • 您可以在终端上使用 psql 。如果您收到类似 yourdatabase=# 的提示,您可以通过键入 \dt 检查其中包含哪些表。您将看到表“schema_migrations”,您可以键入 mccannf 提到的 sql 语句(不要忘记末尾的“;”)
  • 使用 postgres,schema_migrations 周围不应该有引号。感谢您的快速回答。
  • rails dbconsole 是进入数据库控制台的快捷方式。
【解决方案2】:

您可以在本地将正确的时间戳插入到 schema_migrations 表中。

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2015-05-05
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多