सवाल रेल में प्राथमिक कुंजी के साथ तालिकाओं और समस्याओं का निर्माण


जब मैं डेटाबेस प्रबंधक के रूप में MySQL 2 का उपयोग कर रेल में निम्न कोड चलाने का प्रयास करता हूं:

rake db:migrate

मुझे निम्न त्रुटि प्राप्त होती है:

 rake aborted!
 "Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL:"

मुझे यह त्रुटि क्यों मिलती है, यदि डिफ़ॉल्ट रूप से तालिका में प्राथमिक कुंजी "शून्य" नहीं है?

माइग्रेशन कोड, हालांकि:

class CreateUsers < ActiveRecord::Migration
   def change
    create_table :users do |t|
     t.string "first_name"
     t.timestamps
    end
   end 
end

44
2018-01-12 14:01


मूल


कृपया अपने माइग्रेशन का कोड पोस्ट करें। लगता है जैसे आपके पास समग्र पीके नल की अनुमति दे सकता है। - Michael Berkowski
मैंने जोड़ा नहीं, क्योंकि मुझे वहां कुछ अजीब नहीं दिख रहा है। हालांकि, मैं इसे प्रश्न में जोड़ता हूं - Hedley Quintana
आपका MySQL संस्करण क्या है। यह पुराने रेल संस्करण के साथ हाल ही में एक संस्करण संस्करण संघर्ष की तरह दिखता है: github.com/rails/rails/pull/13247  क्या आप रेल अपडेट कर सकते हैं? - Michael Berkowski
मेरे पास रूबी (2.0.0p53), रेल (4.0.2) का नवीनतम संस्करण है और मेरे पास 32 बिट्स के लिए MySQL सर्वर संस्करण 5.7 है। - Hedley Quintana
श्री बर्कोस्की के बहुत सारे धन्यवाद! मैंने MySQL सर्वर को 5.7 से 5.6 तक घटा दिया और समस्या हल हो गई! - Hedley Quintana


जवाब:


मुझे पहले एक ही समस्या थी, और मैंने यहां के अनुसार हल किया https://github.com/rails/rails/pull/13247#issuecomment-32425844

रेल 2.3.5 के साथ, MySQL संस्करण 5.7.9 और MySQL Gem आपको होना चाहिए   इस शुरुआत में एक प्रारंभकर्ता के रूप में   config / initializers / abstract_mysql_adapter.rb:

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

Mysql2 के लिए, यह कॉन्फ़िगर / प्रारंभकर्ता / abstract_mysql2_adapter.rb होना चाहिए:

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

85
2017-12-22 05:47



धन्यवाद दोस्त.. :) - Jai Kumar Rajput


MySQL 5.7 ब्रेकिंग चेंज पेज से:

प्राथमिक कुंजी में कॉलम पूर्ण नहीं होना चाहिए, लेकिन अगर स्पष्ट रूप से घोषित किया गया है   क्योंकि एनयूएलएल ने कोई त्रुटि नहीं बनाई। अब एक त्रुटि होती है। उदाहरण के लिए, ए   कथन तालिका टी (मैं पूर्ण प्राथमिक कुंजी) जैसे कथन अस्वीकार कर दिया गया है।   समान वैकल्पिक तालिका विवरणों के लिए भी यही होता है। (बग # 13 99 5622,   बग # 66987, बग # 15967545, बग # 16545198)

MySQL 5.7.3 में परिवर्तन (2013-12-03, मील का पत्थर 13)

इस मुद्दे तय था तीन महीने पहले। मुझे नहीं पता कि रेल संस्करण क्या है इसका हिस्सा बनने जा रहा है

बंदर पैच है यहाँ

संपादित करें: यह एक साल से भी अधिक रहा है कि इस फिक्स को मास्टर में विलय कर दिया गया था। तो, यह रेल के अंतिम संस्करण का हिस्सा होना चाहिए।

संपादित करें: दरअसल, जो प्रतिबद्धता इसे हल करती है वह यहां मिल सकती है: https://github.com/yahonda/rails/commit/b6655885ef13cf8d1705dc9b5232846f0207febd , और दिखाता है कि फिक्स शामिल है 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। यदि कम से कम v4.1.0 में अपग्रेड करना आपके लिए एक विकल्प है, तो इसे समस्या को ठीक करना चाहिए।


29
2018-03-11 00:24



एफवाईआई, बंदर पैच रेल के लिए आवश्यक 3: stackoverflow.com/a/34555109/293280 - Joshua Pinter


मुझे यह समस्या mysql 5.7.x का उपयोग कर रेल 4.0.x ऐप चला रही थी। मैं रेल 4.2.x के उन्नयन और अपने रत्नों को अपग्रेड करके इसे ठीक करने में सक्षम था।

(मुझे यकीन है कि इन रत्नों को काम की ज़रूरत है, लेकिन उम्मीद है कि वे अभी भी सहायक हैं)

ओल्ड जेमफाइल

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

नया 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

2
2018-01-14 15:44