La mia versione di rails è 4.0.0, la mia versione di mysql è Ver 14.14 Distrib 5.7.9, per Win64 (x86_64). Sto operando di una versione precedente di binari mentre mi scontravo con il mysql come da mia precedente domanda Here. (Controllare Kalelc 's risposta approvato per il mio ricorso)Problema PRIMARY KEY con la creazione di tabelle in Rails usando rake db: migrate il comando con mysql
su esecuzione
rake db:migrate
ottengo il seguente errore
== 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)
non imposto alcun valore NULL nel mio codice, qui è il codice
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
Questo codice è esattamente come mostrato nei tutorial che sto seguendo. Ho anche studiato altri similar issues here su overflow dello stack e ho seguito il consiglio dato. Ho provato il monkey patch as suggested
# lib/patches/abastract_mysql_adapter.rb
class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
ho inserito il file in una cartella che ho creato chiamato patch all'interno del lib della mia applicazione simple_cms. Ho salvato il file come "abstract_mysql_adapter.rb" come suggerito nella stessa patch di scimmia. Ho aggiornato il mio environment.rb dell'applicazione simple_cms con il seguente
require File.expand_path('../../lib/patches/abstract_mysql_adapter.rb', __FILE__)
se poi corro un db rake: migrate comando
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/Codice/Sites/simple_cms/lib/patches/abstract_mysql_adapter.rb è sicuramente il percorso verso la patch della scimmia. Ho messo la patch nel posto sbagliato? Cosa sto sbagliando qui, grattandomi sopra questa? Mi scuso se questo è ovvio per alcuni, ma sto tornando alla codifica dopo un'astinenza molto lunga e non riesco a capire la questione. Molte grazie in anticipo per l'aiuto :)
provare a modificare la tua scimmia-patch per ' "int (11) auto_increment chiave primaria non NULL"' – Undo
Hey Annulla grazie per la risposta rapida, l'ho appena provato e ho ancora lo stesso errore di caricamento – Aerosewall1
questa patch per scimmie deve essere salvata nella lib dell'applicazione o nella lib di rails – Aerosewall1