mysql - puede - Crear tablas y problemas con la clave principal en Rails
llave foranea compuesta mysql (3)
Desde la página de cambio de página de MySQL 5.7:
Las columnas en una PRIMARY KEY deben ser NOT NULL, pero si se declaran explícitamente como NULL no producen ningún error. Ahora se produce un error. Por ejemplo, se rechaza una instrucción como CREATE TABLE t (i INT NULL PRIMARY KEY). Lo mismo ocurre con sentencias ALTER TABLE similares. (Error # 13995622, error # 66987, error # 15967545, error # 16545198)
Cambios en MySQL 5.7.3 (2013-12-03, Milestone 13)
Este problema github.com/rails/rails/pull/13247 3 meses. No sé de qué versión de Rails va a ser parte de
parche de mono está https://github.com/rails/rails/pull/13247#issuecomment-32425844
EDITAR: Ha pasado más de un año que esta solución se fusionó en el maestro. Por lo tanto, debe ser parte de la última versión de Rails.
EDITAR: De hecho, la confirmación que corrige esto se puede encontrar en: https://github.com/yahonda/rails/commit/b6655885ef13cf8d1705dc9b5232846f0207febd , y muestra que la corrección se incluye en v4.2.0.beta1, v4.1.6.rc1, v4.1.5, v4.1.4, v4.1.3, v4.1.2, v4.1.2.rc3, v4.1.2.rc2, v4.1.2.rc1, v4.1.1, v4.1.0, v4.1.0.rc2, v4.1.0.rc1, v4.1.0.beta2, v4.1.0.beta1
. Si actualizar para al menos v4.1.0 es una opción para usted, entonces debería solucionar el problema.
Cuando trato de ejecutar el siguiente código en Rails usando Mysql2 como administrador de base de datos:
rake db:migrate
Obtengo el siguiente error:
rake aborted!
"Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL:"
¿Por qué recibo este error si la clave principal en una tabla por defecto NO es "nula"?
Código de migración, sin embargo:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string "first_name"
t.timestamps
end
end
end
Tuve el mismo problema antes, y lo resolví según https://github.com/rails/rails/pull/13247#issuecomment-32425844
Con Rails 2.3.5, MySQL versión 5.7.9 y mysql gem necesitas tener este bit como inicializador 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
Tuve este problema al ejecutar una aplicación Rails 4.0.x usando mysql 5.7.x. Pude arreglarlo actualizando a rails 4.2.x y actualizando mis gemas.
(Estoy seguro de que estos gemfiles necesitan trabajo, pero espero que sigan siendo útiles)
Antiguo archivo de gemas
source ''https://rubygems.org''
ruby ''2.0.0''
# Bundle edge Rails instead: gem ''rails'', github: ''rails/rails''
gem ''rails'', ''4.0.13''
gem ''mysql2''
# Use unicorn as the app server
# gem ''unicorn''
gem ''sidekiq''
gem ''sinatra''
gem ''whenever''
gem ''thin''
gem ''faye''
gem ''faye-websocket''
#pdf generation
gem ''wicked_pdf''
gem ''wkhtmltopdf-binary''
# Assets
gem ''backbone-on-rails'', ''~> 0.9.9''
gem ''coffee-rails'', ''~> 4.0.1''
gem ''coffee-script-source'', ''=1.8.0''
gem ''ejs'' # uses templates for backbone
gem ''jquery-rails''
gem ''jquery-ui-rails''
gem ''neat''
gem ''sass-rails'', ''~> 4.0.3''
gem ''therubyracer''
gem ''turbolinks''
gem ''uglifier'', ''>= 1.3.0''
gem ''active_model_serializers'', ''0.8.3''
gem ''acts_as_list''
gem ''bcrypt-ruby'', ''~> 3.1.2''
gem ''bootstrap-sass'', ''~> 3.2.0.0''
gem ''bower-rails''
gem ''carrierwave''
gem ''enumerize''
gem ''embedly'' # Url to Attachment Processing
gem ''fancybox2-rails'', ''~> 0.2.4''
gem ''flamegraph''
gem ''fog'' # s3 storage
gem ''globalize'' # I18n for tagging, etc.
gem ''globalize-accessors''
gem ''i18n-tasks'', ''~> 0.8.3''
gem ''hirb''
gem ''kaminari''
gem ''nokogiri''
gem ''newrelic_rpm''
gem ''select2-rails'' # Token Fields
gem ''twilio-ruby''
gem ''rails_autolink'' # Convert urls to links
gem ''redis'', ''3.2.1''
gem ''rest-client''
gem ''rmagick''
gem ''rubyzip'', :require => ''zip'' # Zip files together
gem ''unf''
gem ''mailgun-ruby'', ''~>1.0.3'', require: ''mailgun''
# Deployments
gem ''mina''
group :doc do
gem ''sdoc''
end
group :test do
gem ''rspec-rails'', "= 2.14.2"
gem ''shoulda-matchers'', :require => false
gem ''simplecov'', ''~> 0.9.2''
gem ''database_cleaner''
gem ''codeclimate-test-reporter'', require: nil
end
group :development, :test do
gem ''quiet_assets''
gem ''factory_girl_rails'', "~> 4.0"
gem ''guard'', ''>=2.1.0''
gem ''guard-rspec'', ''= 4.2.9''
gem ''spring'', ''1.3.6''
gem ''spring-commands-rspec''
gem ''foreman''
end
Nuevo Gemfile
source ''https://rubygems.org''
ruby ''2.3.0''
# Bundle edge Rails instead: gem ''rails'', github: ''rails/rails''
gem ''rails'', ''4.2.5''
gem ''mysql2''
gem ''stackprof''
# Use unicorn as the app server
# gem ''unicorn''
gem ''sidekiq''
gem ''sinatra''
gem ''whenever''
gem ''thin''
gem ''faye''
gem ''faye-websocket''
#pdf generation
gem ''wicked_pdf''
gem ''wkhtmltopdf-binary''
# Assets
gem ''backbone-on-rails'', ''~> 0.9.9''
gem ''coffee-rails'', ''~> 4.0.1''
gem ''coffee-script-source'', ''=1.8.0''
gem ''ejs'' # uses templates for backbone
gem ''jquery-rails''
gem ''jquery-ui-rails''
gem ''neat''
gem ''sass-rails'', ''~> 4.0.3''
gem ''therubyracer''
gem ''turbolinks''
gem ''uglifier'', ''>= 1.3.0''
gem ''active_model_serializers'', ''0.8.3''
gem ''acts_as_list''
gem ''bcrypt'', ''~> 3.1.2''
gem ''bootstrap-sass'', ''~> 3.2.0.0''
gem ''bower-rails''
gem ''carrierwave''
gem ''enumerize''
gem ''embedly'' # Url to Attachment Processing
gem ''fancybox2-rails'', ''~> 0.2.4''
gem ''flamegraph''
gem ''fog'' # s3 storage
gem ''globalize'' # I18n for tagging, etc.
gem ''globalize-accessors''
gem ''i18n-tasks'', ''~> 0.8.3''
gem ''hirb''
gem ''kaminari''
gem ''nokogiri''
gem ''newrelic_rpm''
gem ''select2-rails'' # Token Fields
gem ''twilio-ruby''
gem ''rails_autolink'' # Convert urls to links
gem ''redis'', ''3.2.1''
gem ''rest-client''
gem ''rmagick''
gem ''rubyzip'', :require => ''zip'' # Zip files together
gem ''unf''
gem ''mailgun-ruby'', ''~>1.0.3'', require: ''mailgun''
gem ''rack-cors'', :require => ''rack/cors''
# Deployments
gem ''mina''
group :doc do
gem ''sdoc''
end
group :test do
gem ''rspec-rails'', "= 2.14.2"
gem ''shoulda-matchers'', :require => false
gem ''simplecov'', ''~> 0.9.2''
gem ''database_cleaner''
gem ''codeclimate-test-reporter'', require: nil
end
group :development, :test do
gem ''quiet_assets''
gem ''factory_girl_rails'', "~> 4.0"
gem ''guard'', ''>=2.1.0''
gem ''guard-rspec'', ''= 4.2.9''
gem ''spring'', ''1.6.1''
gem ''spring-commands-rspec''
gem ''foreman''
end