tiempo tablas tabla relacionadas pudo parte mismo insertar indice existe error erronea encontrado datos crear columnas columna clave ajena mysql ruby-on-rails rake primary-key dbmigrate

relacionadas - PRIMARIO CLAVE problema al crear tablas en Rails usando rake db: migrate command with mysql



insertar datos en tablas relacionadas mysql java (5)

No tuve suerte con las soluciones anteriores (My env: Rails 3.0.20, MySQL 5.7.13, Ruby 1.9.3p551). ActiveRecord::ConnectionAdapters::ColumnDefinition sobrescribiendo la clase ActiveRecord::ConnectionAdapters::ColumnDefinition . Vea abajo:

class ActiveRecord::ConnectionAdapters::ColumnDefinition def sql_type type.to_sym == :primary_key ? ''int(11) auto_increment PRIMARY KEY'' : base.type_to_sql(type.to_sym, limit, precision, scale) rescue type end end

Almacenado esto en config / initializers / column_definition.rb

Mi versión de rails es 4.0.0, mi versión de mysql es Ver 14.14 Distrib 5.7.9, para Win64 (x86_64). Estoy operando una versión anterior de rieles, ya que estaba teniendo algunos choques con el mysql según mi pregunta anterior Here . ( Kalelc la respuesta aprobada de Kalelc para mi recurso)

al correr

rake db:migrate

Obtuve el siguiente error

== 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)

No establezco ningún valor en NULL en mi código, aquí está el código

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

Este código es exactamente como se muestra en los tutoriales que estoy siguiendo. También he investigado otros problemas similares aquí en el desbordamiento de pila y he seguido los consejos dados. He probado el parche de mono como sugerí

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

Inserté este archivo en una carpeta que he creado parches llamados dentro de la lib de mi aplicación simple_cms. He guardado el archivo como "abstract_mysql_adapter.rb" como se sugiere en el mismo parche de mono. He actualizado mi environment.rb de la aplicación simple_cms con lo siguiente

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

si luego ejecuto un rake db: migrate command

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: /Usuarios/Lizanne/Documents/Code/Sites/simple_cms/lib/patches/abstract_mysql_adapter.rb es definitivamente el camino hacia el parche de mono. ¿He puesto el parche en el lugar equivocado? ¿Qué estoy haciendo mal aquí, rascándome la cabeza por esto? Pido disculpas si esto es obvio para algunos, pero estoy volviendo a programar después de una abstinencia muy larga y no puedo entender el problema. Muchas gracias de antemano por su ayuda :)


Resolví este problema con una aplicación Rails en JRuby en la que estoy trabajando actualizando el mysql-adapter .

Estaba usando la gema activerecord-jdbcmysql-adapter v1.3.14 y actualicé a v1.3.21

Verifique la versión de su adaptador jdbc antes de aplicar una solución a Monkey.


También tuve este problema (mysql 5.7.17 y Rails 4.0.0). Lo arreglé agregando un file config/initializers/mysql2_adapter.rb

require ''active_record/connection_adapters/mysql2_adapter'' class ActiveRecord::ConnectionAdapters::Mysql2Adapter NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" end

y luego, en mi archivo everionment.rb :

require File.expand_path(''../initializers/mysql2_adapter'', __FILE__)


Yo también recientemente enfrenté el mismo problema.

MySQL 5.7 ya no admite valores nulos predeterminados para la clave principal.

Al anular el valor predeterminado nativo para las claves primarias en MySql, puede resolver su problema.

En config / initializers / abstract_mysql_adapter.rb:

class ActiveRecord::ConnectionAdapters::MysqlAdapter NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" end

Para mysql2 debería ser config / initializers / abstract_mysql2_adapter.rb:

class ActiveRecord::ConnectionAdapters::Mysql2Adapter NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" end


Desde MySQL 5.7.3 una clave primaria declarada como NULL produce un error:

Las columnas en una CLAVE PRIMARIA deben ser NO NULAS, pero si se declaran explícitamente como NULL, no se produce ningún error. Ahora se produce un error. Por ejemplo, se rechaza una instrucción como CREATE TABLE t (i INT PRIMER NULA CLAVE). Lo mismo ocurre con sentencias similares de ALTER TABLE. (Error # 13995622, Error # 66987, Error # 15967545, Error # 16545198)

Pero el create_table en su versión de Rails todavía quiere un DEFAULT o NULL para la PRIMARY KEY . He resuelto el problema actualizándolo a una nueva versión de rieles.