CLÉ PRIMAIRE problème avec la création des tables dans les Rails à l'aide de rake db:migrate commande avec mysql

Ma version de rails est 4.0.0, ma version de mysql est Ver 14.14 Distrib 5.7.9, pour Win64 (x86_64). Je suis d'exploitation d'une ancienne version de rails que j'ai été faire quelques affrontements avec mysql comme par ma question précédente Ici. (vérifier Kalelc's approuvé réponse à mon recours)

lors de l'exécution

rake db:migrate 

J'obtiens l'erreur suivante

==  CreateUsers: migrating ====================================================
-- create_table(:users)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead: CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `first_name` varchar(25), `last_name` varchar(50), `email` varchar(255) DEFAULT '' NOT NULL, `password` varchar(40), `created_at` datetime, `updated_at` datetime) ENGINE=InnoDBC:/Users/Lizanne/Documents/Code/Sites/simple_cms/db/migrate/20151116154434_create_users.rb:3:in `up'
C:in `migrate'
ActiveRecord::StatementInvalid: Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead: CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `first_name` varchar(25), `last_name` varchar(50), `email` varchar(255) DEFAULT '' NOT NULL, `password` varchar(40), `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB
C:/Users/Lizanne/Documents/Code/Sites/simple_cms/db/migrate/20151116154434_create_users.rb:3:in `up'
C:in `migrate'
Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead
C:/Users/Lizanne/Documents/Code/Sites/simple_cms/db/migrate/20151116154434_create_users.rb:3:in `up'
C:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

Je ne définissez pas les valeurs NULL dans mon code, voici le code

Class CreateUsers < ActiveRecord::Migration
def up
create_table :users do |t| 
t.column "first_name", :string, :limit => 25 
t.string "last_name", :limit => 50
t.string "email", :default => "", :null => false 
t.string "password", :limit => 40
t.timestamps
end
end
def down
drop_table :users
end
end

Ce code est exactement comme indiqué dans les tutos je suis. J'ai également étudié d'autres des problèmes similaires ici sur stack overflow, et ont suivi les conseils donnés. J'ai essayé le monkey patch comme l'a suggéré

# lib/patches/abastract_mysql_adapter.rb
class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end

J'ai inséré ce fichier dans un dossier que j'ai créé et appelé les patchs à l'intérieur de la lib de mon simple_cms application. J'ai enregistré vers le bas le fichier en tant que "abstract_mysql_adapter.rb"
comme suggéré dans le même monkey patch.
J'ai mis à jour mon environnement.rb de la simple_cms application avec le suivant

require File.expand_path('../../lib/patches/abstract_mysql_adapter.rb', __FILE__)

si je puis exécutez un rake db:migrate commande

rake aborted!
LoadError: cannot load such file -- C:/Users/Lizanne/Documents/Code/Sites/simple_cms/lib/patches/abstract_mysql_adapter.rb
C:/Users/Lizanne/Documents/Code/Sites/simple_cms/config/environment.rb:3:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

C:/Users/Lizanne/Documents/Code/Sites/simple_cms/lib/patches/abstract_mysql_adapter.rb est certainement le chemin à la monkey patch. Ai-je mettre le patch dans le mauvais endroit? Ce que je fais mal ici, de me gratter la tête sur celui-ci? Toutes mes excuses si c'est évident pour certains, mais je suis de retour pour le codage, après une très longue abstinence et je ne peux pas obtenir ma tête autour de la question. Merci beaucoup d'avance pour votre aide 🙂

  • Essayez de modifier votre singe-patch pour "int(11) auto_increment PRIMARY KEY NOT NULL"
  • Hey Annuler merci pour la réponse rapide, juste essayé et j'obtiens toujours la même erreur de Chargement
  • est-ce à monkey patch doivent être enregistrées vers le bas dans le répertoire lib de l'application ou de la lib de rails
  • vous pourriez avoir de la chance de déplacer le fichier: lib/patches/abastract_mysql_adapter.rb à config/initializers/abastract_mysql_adapter.rb - mais si vous êtes seulement à apprendre rails pourquoi ne pas utiliser sqlite (j'ai également en faveur des postgres sur mysql, surtout si vous mettez fin à l'hébergement de vos applications sur heroku)
  • Grâce house9, j'ai juste essayé de vous la suggestion et j'obtiens exactement le même message, mais cette fois, indiquant qu'il ne peut pas charger le fichier dans le initilizer même si j'ai changé le chemin d'accès dans l'environnement.rb. Vraiment coincé ici. Je réponds à votre question, je suis en utilisant mysql comme c'est la version recommandée pour les Lynda tutoriels je suis. ainsi, pour être en mesure de suivre l'enseignant exactement, j'ai pensé qu'il valait mieux s'exercer à utiliser exactement le même jeu, comme il le suggère
  • rake aborted! LoadError: cannot load such file -- C:/Users/Lizanne/Documents/Code/Sites/simple_cms/config/initializers/abstract_mysql_adapter.rb C:/Users/Lizanne/Documents/Code/Sites/simple_cms/config/environment.rb:3:in ``<top (required)>' Tasks: TOP => db:migrate => environment (See full trace by running task with --trace)
  • juste essayé une bundle exec rake db:migrate et qui ne fonctionne pas non plus, même erreur
  • Mettre votre singe patch dans les initialiseurs a fonctionné pour moi. Rails 3.2, MySQL 5.7.10.
  • Je sais que c'est un vieux sujet, mais la question est en effet une faute de frappe. Vous essayez de charger abstract... mais le fichier a été nommé abAstract...
  • oh rly merci vous étudier 😀

InformationsquelleAutor Aerosewall1 | 2015-11-16