我已在rails 3.2.9
和ruby versiion 2.0.0
中创建了一个演示应用程序。脚手架Blog模型后我试图迁移它,但有以下问题。
#rake db:migrate
== CreateBlogs:迁移========================================== ==========
- create_table(:blogs) 耙子流产了!
StandardError:发生错误,所有以后的迁移都被取消:
Mysql2 ::错误:PRIMARY KEY的所有部分必须为NOT NULL;如果在键中需要NULL,请改用UNIQUE:CREATE TABLE
blogs
(id
int(11)DEFAULT NULL auto_increment PRIMARY KEY,title
varchar(255),description
text,created_at
datetime NOT NULL,updated_at
datetime NOT NULL)ENGINE = InnoDB /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:inquery' /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in
阻止执行& #39; /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord -
...
...
...
-3.2.9 / lib / active_record / migration.rb:551:在
migrate' /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/railties/databases.rake:179:in
块(2级)中' /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/rake-11.3.0/exe/rake:27:in`' 任务:TOP => DB:迁移 (通过使用--trace运行任务查看完整跟踪)
答案 0 :(得分:38)
require 'active_record/connection_adapters/mysql2_adapter'
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
答案 1 :(得分:0)
在这一行id int(11) DEFAULT NULL auto_increment PRIMARY KEY
中,您创建了一个主键(永远不能为null),默认值为NULL。
在迁移文件(或schema.rb)中,您应确保删除DEFAULT NULL
部分。
答案 2 :(得分:0)
当使用 主键 列定义了 不为空 时,发生此错误。
即使您定义了任何 复合键 ,这些列定义也不包含 not null 条件
搜索这些列,删除 不为空 条件,这是删除错误的解决方案之一。
答案 3 :(得分:0)
我也遇到了这个问题(mysql 0.3.21和Rails 3.2.22.5)。 我通过在应用程序config / initializers / mysql2_adapter.rb中添加一个文件来修复它(因为之前没有这样的文件)
在下面的内容中添加了
需要'active_record / connection_adapters / mysql2_adapter' ActiveRecord :: ConnectionAdapters :: Mysql2Adapter类 NATIVE_DATABASE_TYPES [:primary_key] =“ int(11)自动增量主键” 结束
然后在内容下面添加的我的environment.rb文件中,
需要File.expand_path('../ initializers / mysql2_adapter', FILE )
它奏效了。