我有运行我的rails服务器的问题 . 我在初始化程序中设置了abstract_mysql2_adapters,它包括:
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
它解决了我的rake db:migrate问题,但是当我尝试运行我的rails服务器时,它给了我这个错误 .
C:/Users/XXXX/Documents/RoRCmS/simple_cms/config/initializers/abstract_mysql2_adapter.rb:2:in <class:Mysql2Adapter>':来自C的未初始化常量ActiveRecord :: ConnectionAda pters :: Mysql2Adapter :: NATIVE_DATABASE_TYPES(NameError) :/Users/John/Documents/RoRCmS/simple_cms/config/initializers/abstract_mysql2_adapter.rb:1:in'from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/ lib / rails / engine.rb:609:来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib的<class:Engine>中的块(2级) /rails/engine.rb:608:ineach'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/engine.rb:608:in block in <class:Engine>'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/initializable.rb:30:ininstance_exec'来自C:/ Ruby23- x64 / lib / ruby / gems / 2.3.0 / gems / railties-4.0.0 / lib / rails / initializable.rb:30:in run'from C:/Ruby23-x64/lib/ruby/gems/2.3.0 /gems/railties-4.0.0/lib/rails/initializable.rb:55:inblock in run_initializers'来自C:/ Ruby23-x64 / lib / ruby / 2.3.0 / tsort.rb:228:在tsort_each'中的块中来自C:/Ruby23-x64/lib/ruby/2.3.0/tsort.rb:350:inblock(2个级别)in each_strongly_connected_component'来自C:/ Ruby23 -x64 / lib / ruby / 2.3.0 / tsort.rb:431:in each_strongly_connected_component_from'from C:/Ruby23-x64/lib/ruby/2.3.0/tsort.rb:349:inblock in each_strongly_connected_component'from C:/ Ruby23-x64 / lib / ruby / 2.3.0 / tsort.rb:347:在每个'来自C:/Ruby23-x64/lib/ruby/2.3.0/tsort.rb:347:incall'来自C:/ Ruby23 -x64 / lib / ruby / 2.3.0 / tsort.rb:347:in each_strongly_connected_component'来自C:/Ruby23-x64/lib/ruby/2.3.0/tsort.rb:226:intsort_each'来自C:/ Ruby23- x64 / lib / ruby / 2.3.0 / tsort.rb:205:来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/initializable的tsort_each' .rb:54:inrun_initializers'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/application.rb:215:初始化!'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/railtie/configurable.rb:30:inmethod_missing'来自C:/ Users / John / Documents / RoRCmS / simple_cms / config / environment.rb:5:在<top(required)>'from C:/Users/John/Documents/RoRCmS/simple_cms/config.ru:3:inrequire'from C:/ Users / John / Documents / RoRCmS / simple_cms / config.ru:3:在C中的<main>'块中:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.5.5/lib/rack/builder .rb:55:ininstance_eval'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.5.5/lib/rack/builder.rb:55:ininizeize'from C:/用户/ John / Documents / RoRCmS / simple_cms / config.ru:innew'来自C:/Users/John/Documents/RoRCmS/simple_cms/config.ru:in <main>'来自C:/ Ruby23-x64 / lib / ruby /gems/2.3.0/gems/rack-1.5.5/lib/rack/builder.rb:49:ineval'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.5 .5 / lib / rack / builder.rb:49:来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.5.5/lib/rack/builder.rb的new_from_string': 40:inparse_file'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack- 1.5.5 / lib / rack / server.rb:277:来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/rack-1.5.5/lib/rack/server.rb的build_app_and_options_from_config' :199:inapp'来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/commands/server.rb:48:in app'from C:/ Ruby23-x64 / lib / ruby / gems / 2.3.0 / gems / rack-1.5.5 / lib / rack / server.rb:314:inwrapped_app'来自C:/Ruby23-x64/lib/ruby/gems/2.3 . 0 / gems / railties-4.0.0 / lib / rails / commands / server.rb:75:in start'from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0 /lib/rails/commands.rb:78:inblock in'from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/commands.rb:73:32:来自C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in'from bin / rails:4:in require '来自bin / rails:4:in'
我现在真的需要解决这个问题..谢谢你们 .
3 回答
我解决了它如下 . 使用
mysql -u username -p database_name < file.sql
将遗留的sql dumpfile导入MySQL后,我继续使用bin/rake db:migrate
执行迁移,但是我遇到了错误Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead
.所以我尝试了和你一样的猴子补丁,正如用户pjg在这里建议https://github.com/rails/rails/pull/13247#issuecomment-32425844,但后来我遇到了你的错误
我按照用户John Geliberte的建议,用
gem 'activerecord-native_db_types_override'
更新了我的Gemfile,并检查了我还有gem 'mysql2'
(不是'activerecord-mysql2-adapter'导致其他错误)并运行bundle install
.我在Rails ActiveRecord library file中为abstract_mysql_adapter使用了与activerecord-native_db_types_override gem相关的文档和NAENT_DATABASE_TYPES的应用属性,这样我做了以下更改:
我创建了 config/initializers/abstract_mysql2_adapter.rb 并添加了:
我创建了 config/environment.rb 并添加以下内容来加载猴子补丁:
我检查 config/database.yml 包含'adapter: mysql2'我想要使用的数据库连接 .
然后我跑了
bin/rake db:migrate
然后成功完成了迁移 .我已经为ActiveRecord Native Database Types Override Gem的文档制作了pull request .
尽管如此,从MySQL 5.7降级到5.5要容易得多 .
我的系统:
mysql -V
是mysql Ver 14.14 Distrib 5.7.13
rails -v
是4.2.4
ruby -v
是ruby 2.3.0p0
请尝试使用此代码:
求助:我添加了gem:gem'activerecord-native_db_types_override'