0

我是这个 Rails 的初学者。我正在努力修复以下错误

C:\library>rake db:migrate --trace
(in C:/library)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
==  CreateBooks: migrating
====================================================
-- create_table(:books)
rake aborted!
An error has occurred, all later migrations canceled:

Mysql::Error: Table 'books' already exists: CREATE TABLE `books` (`id`
int(11) D
EFAULT NULL auto_increment PRIMARY KEY, `created_at` datetime,
`updated_at` date
time) ENGINE=InnoDB

我手动删除了所有未解决问题的表现在使用 rake db:drop db:create db:migrate 但仍然收到 rake aborted 消息..

C:\library>rake db:drop db:create db:migrate

(in C:/library)
rake aborted!
Mysql::Error: Specified key was too long; max key length is 767 bytes: 
CREATE UN
IQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`)

我也没有 schema.rb 文件。

4

1 回答 1

1

第一条消息可能是迁移失败但未正确退出的结果。在执行迁移之前拍摄数据库快照是个好主意,这样如果出现问题,您可以恢复到已知良好的配置。

第二条消息表明您正在尝试在一个“太大”的字段上创建索引,MySQL 无法执行此操作。由于 MySQL 处理 UTF-8 字符的方式,每个字符都分配了三个字节的键空间。这意味着任何超过 255 个字符的内容都需要有一个长度限制,否则它将无法工作,至少在抱怨它的 MySQL 版本中是这样。

看起来很奇怪的是它试图建立schema_migrations表格并失败了。您的 MySQL 配置是否有任何异常可能触发此问题?它是旧版本吗?建议使用 5.5 或更高版本。

于 2013-02-14T06:02:29.143 回答