web-dev-qa-db-ja.com

Railsの主キーを持つテーブルと問題の作成

Mysql2をデータベースマネージャーとして使用してRailsで次のコードを実行しようとすると:

rake db:migrate

次のエラーが表示されます。

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

デフォルトでテーブルの主キーが「null」ではない場合、なぜこのエラーが発生しますか?

ただし、移行コード:

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

以前にも同じ問題があり、ここに従って解決しました https://github.com/Rails/rails/pull/13247#issuecomment-32425844

Rails 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の場合、config/initializers/abstract_mysql2_adapter.rbである必要があります。

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

Mysql 5.7の最新の変更ページから:

PRIMARY KEYの列はNOT NULLでなければなりませんが、明示的にNULLとして宣言された場合、エラーは発生しませんでした。これでエラーが発生します。たとえば、CREATE TABLE t(i INT NULL PRIMARY KEY)などのステートメントは拒否されます。同様のALTER TABLEステートメントでも同じことが起こります。 (バグ#13995622、バグ#66987、バグ#15967545、バグ#16545198)

MySQL 5.7.3の変更(2013-12-03、マイルストーン13)

この問題 修正済み 3か月前。何がRailsバージョンの一部になるかわからない

モンキーパッチは ここ

EDIT:この修正がmasterにマージされてから1年以上が経ちました。したがって、Railsの最新バージョンの一部でなければなりません。

EDIT:実際、これを修正するコミットは次の場所にあります: 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
Thomas

Mysql 5.7.xを使用してRails 4.0.xアプリを実行しているときにこの問題が発生しました。Rails 4.2.xにアップグレードしてアップグレードすることにより、私の宝石。

(これらのgemfileには作業が必要であると確信していますが、うまくいけば、まだ役に立つでしょう)

古いGemfile

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
Jared Menard