【发布时间】:2017-11-16 22:02:04
【问题描述】:
我用以下代码编写了一个迁移:
class CreateTableSomeTable < ActiveRecord::Migration[5.1]
def change
create_table :some_tables do |t|
t.references :user, foreign_key: true
t.references :author, references: :user, foreign_key: true
t.text :summary
end
end
end
这是创建数据库表的基本迁移。但是:当我运行 rails db:migrate 时,一条非常奇怪的错误消息会中止迁移:
Mysql2::Error: 表 'my_database.some_tables' 不存在:SHOW FULL FIELDS FROM 'some_tables'
好像错误是说它无法创建表,因为表确实存在,这没有意义。
我看过并尝试过的事情:
- 查看了似乎没问题的 database.yml。什么都没有改变,我最近运行了其他迁移就好了(尽管没有创建数据库表的迁移)
- 运行
bundle以确保所有 gem 都已安装 - 删除了
schema.rb文件,使用另一个副本中的数据重新创建了数据库,然后我运行rake db:schema:dump来重新创建schema.rb文件。我尝试再次运行迁移,但仍然遇到相同的错误。
我正在使用rails 5.1.1 以及mysql2 0.4.6
关于如何让迁移运行的任何提示?
【问题讨论】:
-
看起来你的鸭子排成一排,所以这可能是一个多余的问题,但是:你是否验证过是这个特定的迁移导致了问题,例如,通过放置调试代码在迁移中,还是使用环境变量导致只运行一个迁移?当您运行迁移时,日志文件中会显示与该表相关的内容?
-
尝试运行
rake db:migrate:status以查看已应用于数据库的迁移。也许您发现您正在连接到不同的架构,或者您发现失败的迁移不是您认为导致失败的迁移。 -
我的问题不同并且使用了不同的 ORM,但留下评论以帮助可能正在经历类似事情的其他人......我的迁移是 ORM 语法和原始 SQL 的混合,我有最初将表名声明为一个常量,以便根据需要在整个过程中重用。原来错误是 b/c 我在 SQL 中错误地插入了表名(引号太多)
标签: mysql ruby-on-rails ruby mysql2