rake db:migrate的问题

时间:2013-02-14 05:43:04

标签: mysql ruby-on-rails ruby-on-rails-3

我是这个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 中止消息..

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文件。

1 个答案:

答案 0 :(得分:1)

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

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

看起来奇怪的是,它正在尝试构建schema_migrations表并失败。您的MySQL配置有什么不寻常可能触发这个吗?它是旧版本吗?建议使用5.5或更高。