我是这个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文件。
答案 0 :(得分:1)
第一条消息可能是迁移失败但未正确退出的结果。在执行迁移之前拍摄数据库的快照是个好主意,这样如果它混乱就可以恢复到已知良好的配置。
第二条消息表明你正在尝试在一个“太大”的字段上创建索引,以便MySQL执行此操作。由于MySQL处理UTF-8字符的方式,每个字符被分配三个字节的密钥空间。这意味着任何超过255个字符的内容都需要给出一个长度限制,否则它将无法工作,至少在抱怨它的MySQL版本中。
看起来奇怪的是,它正在尝试构建schema_migrations
表并失败。您的MySQL配置有什么不寻常可能触发这个吗?它是旧版本吗?建议使用5.5或更高。