J'ai créé une application de démonstration dans Rails 3.2.9
et Ruby versiion 2.0.0
. Après avoir échafaudé le modèle de blog, j'essaie de le migrer, mais le problème suivant.
# rake db: migrate
== CreateBlogs: migration =========================================== =======
- create_table (: blogs) rake avorté!
StandardError: une erreur s'est produite, toutes les migrations ultérieures ont été annulées:
Mysql2 :: Error: Toutes les parties d’une clé primaire doivent être NOT NULL; si vous avez besoin de NULL dans une clé, utilisez plutôt UNIQUE: CREATE TABLE
blogs
(id
int (11) DEFAULT NULL auto_increment PRIMARY KEY,title
varchar (255),description
text,created_at
datetime NON, NULL__,updated_at
unique /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
block in execute ' /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/activerecord-
....
....
....
-3.2.9/lib/active_record/migration.rb: 551: dans
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
block (2 niveaux) dans ' /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/rake-11.3.0/exe/rake:27:in `' Tâches: TOP => db: migrate (Voir la trace complète en exécutant la tâche avec --trace)
require 'active_record/connection_adapters/mysql2_adapter'
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
Dans cette ligne id int(11) DEFAULT NULL auto_increment PRIMARY KEY
, vous créez une clé primaire (qui ne peut jamais être nulle), avec la valeur par défaut NULL. Dans votre fichier de migration (ou schema.rb), vous devez vous assurer que la partie DEFAULT NULL
est supprimée.