【问题标题】:Rails 4 issue with mysql database tables after upgrading from Rails 3.2从 Rails 3.2 升级后,Rails 4 出现 mysql 数据库表问题
【发布时间】:2013-06-30 11:17:56
【问题描述】:

我最近将我的应用升级到 Rails 4(从 Rails 3.2)。

但似乎该应用程序不再找到一些 mysql 表,例如名为 Accidents 的表。

在应用程序中我发现此错误:

Mysql2::Error: Table 'gms.accidents' doesn't exist: SHOW FULL FIELDS FROM `accidents`

好吧,好像表不存在了,然后(看到是dev模式,重置DB没问题),我在终端运行rake db:schema:load,但是:

-- create_table("accidents", {:force=>true})
rake aborted!
Mysql2::Error: Tablespace for table '`gms`.`accidents`' exists. Please DISCARD the tablespace before IMPORT.: CREATE TABLE `accidents`
[...]

发生了什么?该表不存在但存在??
为什么应用程序找不到一些表格?

【问题讨论】:

  • 3 建议: 1. 检查您的 config/database.yml 并确保它具有正确的连接信息。 2. 检查 mysql 工具或提示中的数据并检查那里的内容 3. 告诉我们哪些表有效?
  • 感谢@MichaelDurrant 的建议。综合中: 1. 可以; 2.用mysql工具,表不存在(不知道为什么); 3...;我已经手动删除了数据库(使用 rake db:drop 不起作用...),然后重新创建另一个数据库。现在看来可行,但发生的事情很奇怪。
  • 好的,那我把它作为答案发布,我也这样做了。

标签: ruby-on-rails-3.2 rails-activerecord ruby-on-rails-4 mysql2 ruby-2.0


【解决方案1】:

一个选项(不是修复,但可以让您继续前进)。

如果这只是一个开发或本地数据库,请手动删除数据库并更新 schema_migrations 表,然后 rake:db migrate 以从头开始重新创建。

【讨论】:

  • 请注意:比 rake db:migrate 更好的是:1. rake db:create, 2. rake db:schema:load(因此它直接加载 db 的“最终”版本,而不是全部迁移)
  • 是的,这很有效,在许多情况下可能是更好的选择。注意事项:如果人们已经将数据更新以及架构(是的,我看到了),则可能会出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 2017-03-23
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多