mysql - rake db :migrate 的问题

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

最佳答案

第一条消息可能是迁移失败但未正确撤消的结果。最好在执行迁移之前拍摄数据库快照,以便在出现问题时可以恢复到已知良好的配置。

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

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

关于mysql - rake db :migrate 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868490/

相关文章:

ruby-on-rails - ActiveRecord:当引用键不存在时如何抛出异常

ruby-on-rails - Rails、Devise 和 Omniauth - 设置问题

ruby-on-rails - 片段缓存和用户头像/图像

ruby-on-rails-3 - Gemfile.lock 在 Rails 中使用?

mysql - Python3 mysqlclient-1.3.6 (aka PyMySQL) 用法?

mysql - 将具有重复值的行转换为列 - MySQL

ruby-on-rails - 如何在生产中启动一个resque队列(EC2/Ubuntu)?

ruby-on-rails-3 - Rails 3中浏览器关闭时如何终止 session

mysql - 如何在 phpmyadmin 引用 mysql 中的外键

mysql - NodeJS MySQL 异步调用阻止进程退出