【问题标题】:SQLite Command Line - remove migration errorSQLite 命令行 - 删除迁移错误
【发布时间】:2016-08-08 16:24:42
【问题描述】:

我的 Rails 应用程序数据库出现问题,现在我无法完成任何迁移。

我在命令行上运行了以下命令,结果如下 -

PRAGMA 表信息(事件);

0|id|INTEGER|1||1
1|title|varchar|0||0
2|location|varchar|0||0
3|date|date|0||0
4|time|time|0||0
5|description|text|0||0
6|organised_by|varchar|0||0
7|created_at|datetime|1||0
8|updated_at|datetime|1||0
9|user_id|integer|0||0
10|image_file_name|varchar|0||0
11|image_content_type|varchar|0||0
12|image_file_size|integer|0||0
13|image_updated_at|datetime|0||0
14|category_id|integer|0||0
15|url|varchar|0||0
16|number_of_spaces|integer|0||0
17|price|integer|0||0
18|is_free|boolean|0||0
19|organiser_profile|url|0||0

这里的问题是这张桌子上的第 19 号 -

 19|organiser_profile|url|0||0

Url 不是输入错误的可接受数据类型。我相信这是阻止我的数据库提交任何进一步迁移的绊脚石。

我是 Rails 的新手,以前从未手动修改过数据库。我想要做的是以下 -

  1. 删除/移除/转储 - 从我的事件表中删除 19。整个 线必须消失。

  2. 在我执行 rake db:drop 之前检查数据库中的内容(此应用程序正在开发中,因此不会有 很多

  3. 在我执行以下操作之前 - bundle exec rake db:drop db:create db:migrate,我想简要了解一下这会带来什么后果

我很确定这是解决此问题并允许我再次执行迁移并继续使用我的应用程序所需要的。我以前从未做过上述任何事情,如果在此过程中提供任何帮助,我将非常感激。

【问题讨论】:

  • 你有一个现有的 Rails 应用程序,它设置了一个表,其中包含一个 url 类型的列,并且你试图让它在 SQLite 之上运行? organiser_profile 定义在哪里,schema.rb?这个应用程序打算与什么数据库一起使用?
  • 不,列是organiser_profile,我使用的类型是无效的url。我现在需要从我的数据库中完全删除它。在 schema.rb 中,我收到以下消息 - '#could not dump table "events" because of following NoMethodError # undefined method `[]' for nil:NilClass'。这显然是因为迁移错误 - 我想不出其他可能的原因(我已经检查了所有内容)。该应用程序是一个活动网站 - 创建/预订活动。
  • 是的,但是这个organiser_profile 专栏是从哪里来的?你是手动创建的吗?您是否尝试在现有 SQLite 数据库之上构建应用程序?
  • 否,该列是通过迁移生成的。这是我完成的最后一次迁移。从那以后每一个都没有工作。
  • 所以迁移只成功了一半:它添加了类型错误的列,但没有成功重新生成schema.rb,对吧?删除有问题的迁移,手动删除列(sqlite3 内部的alter table t drop column c),使用正确的列类型重新创建迁移,然后继续。

标签: ruby-on-rails ruby sqlite rake database-migration


【解决方案1】:

您尚未投入生产或有丢失有价值信息的危险,因此只需在错误迁移之前从 github 中检查 db 文件。

git checkout <commit> file

然后修复错误的迁移,然后使用 rake db:migrate 再次运行迁移。在这种情况下,没有必要尝试从命令行手动编辑表格,这是不必要的。

【讨论】:

  • 我用 git 命令 'git add --all && git stash && git stash drop' 尝试了类似的操作并重新打开了我的文件。架构正在显示,但当我尝试另一次迁移时,错误又回来了。
  • 只需删除架构(您不需要这样做,但无论如何都要做)并从一开始就签出数据库,然后再次运行所有迁移。这就是你需要做的所有事情
  • 删除整个架构文件?
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2017-09-27
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多