当我做 rake db:migrate
时,我得到错误,下面我已经附加了我的databse.yml和我的宝石文件,尝试了互联网上的所有东西,但错误没有得到解决!
rake aborted!
LoadError: cannot load such file -- mysql2
development:
adapter: mysql2
encoding: utf8
database: demo_project_development
pool: 5
username: root
password: root
socket: /var/run/mysqld/mysqld.sock
host: localhost
test:
adapter: mysql2
database: demo_project_test
database: db/development.mysql2
username: root
password: root
pool: 5
timeout: 5000
production:
adapter: postgresql
database: demo_project_production
pool: 5
timeout: 5000
Gemfile源'https://rubygems.org ' gem ' rails ', ' 4.2.6 ' gem ' sass-rails ', '~> 5.0 ' gem ' uglifier ', '> = 1.3.0 ' gem ' coffee-rails ', '~> 4.1.0 ' gem ' jquery-rails ' gem ' turbolinks ' gem ' jbuilder ', '~> 2.0 ' gem ' sdoc ', '~> 0.4.0',group :: doc
group :production do
gem 'pg', '0.20'
gem 'rails_12factor'
end
group :test do
gem 'byebug'
gem 'mysql2', '>= 0.3.13', '< 0.5'
end
gem 'spring'
gem 'devise'
gem "cancan"
gem 'ckeditor', '4.1.3'
gem "nested_form"
gem "paperclip", "~> 5.0.0"
gem 'bootstrap-sass', '~> 3.3.6'
gem 'kaminari'
gem 'ratyrate'
gem 'thinking-sphinx', '~> 3.3.0'
gem 'delayed_job_active_record'
gem 'rails-api'
gem 'active_model_serializers', '~> 0.10.6'
group :development do
gem 'web-console', '~> 2.0'
gem 'mysql2', '>= 0.3.13', '< 0.5'
end
下面是我的application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(*Rails.groups)
module DemoProject
class Application < Rails::Application
config.active_record.raise_in_transactional_callbacks = true
config.active_job.queue_adapter = :delayed_job
config.api_only = false
end
end
配置/ envoirment.rb
require File.expand_path('../application', __FILE__)
Rails.application.initialize!
的boot.rb
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' # Set up gems listed in the Gemfile.
1 回答
我能够使用
Gemfile
和database.yml
在虚拟Rails 4.2.6应用程序中重现您的错误 . 我甚至无法在没有提升LoadError: cannot load such file -- mysql2
的情况下将应用程序推送到Heroku .我通过从开发和测试组中删除
mysql2
gem并将其添加到默认组来修复此问题 . 我的猜测是在本地运行bundle install
将它作为依赖项添加到Gemfile.lock
,它被检入git并推送到Heroku . Heroku不会安装gem,当应用程序试图要求它时,会引发LoadError
.几个注意事项:如果要将一个gem添加到两个或更多特定组,请不要单独指定它们 . 这只意味着有两个地方你必须记住改变你的版本依赖 . 所以不要这样
做这个
此外,你不应该在本地使用MySQL和PostgreSQL,只需使用Postgres . 它们并不完全兼容,因此您必将遇到令人困惑的问题 . 解决此问题的最佳方法是完全删除
mysql2
并为Postgres配置开发和测试数据库 .