【问题标题】:heroku rake db:migrate is not working in rails 4heroku rake db:migrate 在 rails 4 中不起作用
【发布时间】:2018-01-12 13:08:00
【问题描述】:

当我rake db:migrate 时,我得到了错误,下面我附上了我的databse.yml 和我的gem 文件,尝试了互联网上的所有东西,但错误没有得到解决!

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

宝石文件 源'https://rubygems.org' 宝石'导轨','4.2.6' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' 宝石'咖啡轨','〜> 4.1.0' 宝石'jquery-rails' 宝石“涡轮链接” 宝石'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

config/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.

【问题讨论】:

  • 你的gemfile中添加了mysql gem吗?您是否运行了捆绑安装?
  • 是的,我也安装了包
  • 您的机器或 heroku 中出现此错误?你在运行heroku run rake db:migrate 吗?而且据我所知,Heroku 不支持 mysql,它只支持 Postgresql。
  • 我在我的机器上得到这个,我知道 heroku 只支持 postgresql
  • 您的问题和标题表明错误出在 Heroku 上,而不是您的本地机器上

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

我能够使用您的 Gemfiledatabase.yml 在虚拟 Rails 4.2.6 应用程序中重现您的错误。如果不提高 LoadError: cannot load such file -- mysql2,我什至无法将应用推送到 Heroku。

我通过从开发组和测试组中删除 mysql2 gem 并将其添加到默认组来解决了这个问题。我的猜测是,在本地运行 bundle install 会将其作为对 Gemfile.lock 的依赖项添加到 git 中并推送到 Heroku。 Heroku 不会安装 gem,当应用程序尝试要求它时,会引发 LoadError

group :test do
  gem 'byebug'
end

group :development do
  gem 'web-console', '~> 2.0'
end

gem 'mysql2', '>= 0.3.13', '< 0.5'

一些注意事项:如果您想将一颗宝石添加到两个或更多特定组中,请不要单独指定它们。这只是意味着您必须记住在两个地方更改您的版本依赖项。所以不是这个

group :test do
  gem 'byebug'
  gem 'another_gem'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'another_gem'
end

这样做

group :test do
  gem 'byebug'
end

group :development do
  gem 'web-console', '~> 2.0'
end

group :development, :test do
  gem 'another_gem'
end

另外,您不应该在本地使用 MySQL,而在生产环境中使用 PostgreSQL,只需同时使用 Postgres。它们并不完全兼容,因此您一定会遇到令人困惑的问题。您对这个问题的最佳解决方案是完全删除 mysql2 并为 Postgres 配置您的开发和测试数据库。

【讨论】:

  • 我修复了空格问题,但仍然出现同样的错误
  • 使用git push heroku master提交并推送更改后?
  • 是的,我提交了,并将我的更改推送到 master
  • 抱歉,只是为了完全清楚您正在运行的命令:git push heroku master, heroku run rake db:migrate ?
  • @Ali 请发布以下文件:Gemfileconfig/application.rbconfig/boot.rbconfig/environment.rb。加载mysql2 gem 似乎是一个错误
猜你喜欢
  • 2015-02-20
  • 2014-04-30
  • 2012-04-08
  • 2020-01-26
  • 2013-07-18
  • 1970-01-01
  • 2016-11-19
  • 2014-07-10
相关资源
最近更新 更多