2015-11-17 7 views
7

मुझे MySQL 5.7.9 (ओएसएक्स 10.11 एल कैपिटन पर ब्रू के माध्यम से स्थापित) के उन्नयन के बाद समस्याएं आ रही हैं: मेरे सभी लीगेसी ऐप्स रेल 3.2 पर आधारित हैं। * काम करना बंद कर दिया ।MySQL 5.7.9, रेल 3.2, mysql2 0.3.20

ध्यान दें कि मैं एक उदाहरण के रूप में एक नया एप्लीकेशन उपयोग करूंगा, लेकिन मुझे पुराने डेटाबेस के साथ पुराने एप्लिकेशन की आवश्यकता है, न कि नए।

$ rvm use 2.1.5 
$ rails _3.2.22_ new r32-mysql2-test -d mysql 
$ rails generate model Product name:string description:text 
     invoke active_record 
/Users/user/.rvm/gems/[email protected]/gems/bundler-1.7.6/lib/bundler/rubygems_integration.rb:266:in `block in replace_gem': Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (can't activate mysql2 (~> 0.3.10), already activated mysql2-0.4.1. Make sure all dependencies are added to Gemfile.) (LoadError) 

mysql2 0.4.1 काम नहीं करेगा, तो चलो Gemfile

$ rails generate model Product name:string description:text 
     invoke active_record 
     create db/migrate/20151117104219_create_products.rb 
     create app/models/product.rb 
     invoke test_unit 
     create  test/unit/product_test.rb 
     create  test/fixtures/products.yml 

$ rake db:create db:migrate 
== CreateProducts: migrating ================================================= 
-- create_table(:products) 
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 `products` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `name` varchar(255), `description` text, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/mysql2_adapter.rb:213:in `execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/schema_statements.rb:170:in `create_table' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:434:in `create_table' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:466:in `block in method_missing' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:438:in `block in say_with_time' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:438:in `say_with_time' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:458:in `method_missing' 
/Users/user/dev/r32-mysql2-test/db/migrate/20151117104219_create_products.rb:3:in `change' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:407:in `block (2 levels) in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:407:in `block in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:389:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:528:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:720:in `block (2 levels) in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:777:in `call' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:777:in `ddl_transaction' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:719:in `block in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:700:in `each' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:700:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>' 
/Users/user/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `eval' 
/Users/user/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `<main>' 
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 `products` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `name` varchar(255), `description` text, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/mysql2_adapter.rb:213:in `execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/schema_statements.rb:170:in `create_table' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:434:in `create_table' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:466:in `block in method_missing' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:438:in `block in say_with_time' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:438:in `say_with_time' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:458:in `method_missing' 
/Users/user/dev/r32-mysql2-test/db/migrate/20151117104219_create_products.rb:3:in `change' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:407:in `block (2 levels) in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:407:in `block in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:389:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:528:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:720:in `block (2 levels) in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:777:in `call' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:777:in `ddl_transaction' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:719:in `block in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:700:in `each' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:700:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>' 
/Users/user/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `eval' 
/Users/user/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `<main>' 
Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/mysql2_adapter.rb:213:in `execute' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/schema_statements.rb:170:in `create_table' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:434:in `create_table' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:466:in `block in method_missing' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:438:in `block in say_with_time' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:438:in `say_with_time' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:458:in `method_missing' 
/Users/user/dev/r32-mysql2-test/db/migrate/20151117104219_create_products.rb:3:in `change' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:407:in `block (2 levels) in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:407:in `block in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:389:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:528:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:720:in `block (2 levels) in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:777:in `call' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:777:in `ddl_transaction' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:719:in `block in migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:700:in `each' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:700:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate' 
/Users/user/.rvm/gems/ruby-2.1.5/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>' 
/Users/user/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `eval' 
/Users/user/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `<main>' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

को gem 'mysql2', '~> 0.3.20' जोड़ने वहाँ कुछ भी मैं वापस स्विच किए बिना विरासत डेटाबेस का समर्थन और MySQL 5.6 को अग्रेषित करने के लिए कर सकते हैं?

टीआईए

उत्तर

12

यह दो साल पहले रेल के लिए तय किया गया था। मुझे यकीन नहीं है कि रेल के कौन से संस्करणों में फिक्स है। https://github.com/rails/rails/pull/13247#issuecomment-158787912

यहाँ उन समाधानों में से एक है: यहां रेल के पुराने संस्करणों में यह तय करने के लिए कुछ अलग तरीके हैं

With Rails 2.3.5, MySQL version 5.7.9 and mysql gem you need to have this bit as an initializer in config/initializers/abstract_mysql_adapter.rb:

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

For mysql2 it should be config/initializers/abstract_mysql2_adapter.rb:

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

मैं रेल में लगता है कि 2 आप environment.rb में के बजाय रखना चाहिए कि एक प्रारंभिक

मेरे लिए, कम से कम एक रेक कार्य अभी भी उस फिक्स के साथ विफल रहता है, और मुझे पैच करना था या सीधे रेक कार्य में पैच की आवश्यकता थी। I read that रेक कार्य जो पर्यावरण पर निर्भर नहीं हैं प्रारंभिक या पर्यावरण.आरबी लोड नहीं करते हैं, इसलिए शायद यही कारण है। हो सकता है कि यह इस कोड बेस के लिए विशिष्ट है ...

उम्मीद है कि उन समाधानों में से एक काम करता है, लेकिन यदि नहीं तो एक और संभावित अस्थायी कार्यवाही बंदर-पैच ActiveRecord को स्थिर करने के लिए है (lib/active_record/connection_adapters/abstract_mysql_adapter.rb में)।

यदि आप activerecord-mysql2-adapter gem का उपयोग करते हैं तो आपको इसे ठीक करने की आवश्यकता हो सकती है। (activerecord-mysql2-adapter-{GEM VERSION}/lib/active_record/connection_adapters/mysql2_adapter.rb में देखें)। हालांकि, मुझे उस मणि के साथ अन्य समस्याएं आ रही हैं, और इसकी आवश्यकता भी नहीं हो सकती है।

+0

धन्यवाद! Mysql2 प्रारंभकर्ता के साथ मैं माइग्रेशन चलाने में सक्षम था। दुर्भाग्य से अधिकांश spec विफल रहता है, उदाहरण: ActiveRecord :: स्टेटमेंट इन्वालिड: MySQL 2 :: त्रुटि: खंड द्वारा ऑर्डर का अभिव्यक्ति # 1 SELECT सूची में नहीं है, संदर्भ कॉलम 'db_test.page_ts.slug' जो SELECT सूची में नहीं है; यह DISTINCT के साथ असंगत है: 'पृष्ठ' से चुनें 'पृष्ठ' से बाएं बाहरी जॉइन 'पृष्ठ_ट्स' पर 'पृष्ठ_ts'.'page_id' = 'pages'.'id' कहां' page_ts'.locale' = 'en 'और ('page_ts'.'slug' =' t-3 'या' page_ts'.llug 'जैसे' t-3 -% ') LENGTH द्वारा आदेश (' page_ts'.llug') डीईएससी,' पृष्ठ_ट्स '.ll' डीईएससी लिमिटेड 1''' – tagliala

+0

@ किसी भी अन्य समाधान को डेविड करें ताकि हमें यह फ़ाइल जोड़ने की आवश्यकता न हो? –

+0

यह सब मुझे पता है। यदि आप MySQL 5.6 पर रहने के साथ ठीक हैं तो यह एक विकल्प है, लेकिन यह दीर्घकालिक समाधान नहीं हो सकता है। मैंने जवाब में यह शामिल नहीं किया क्योंकि सवाल विशेष रूप से 5.7 तक अपग्रेड करने का तरीका है। –

संबंधित मुद्दे