Rails 4 - Gem :: LoadError: 'mysql2' especificado para o adaptador de banco de dados, mas a gem não está carregada

150

No meu gemfile eu tenho:

gem 'mysql2'

Meu database.yml é o seguinte:

default: &default
  adapter: mysql2
  database: <%= ENV['db_name'] %>
  username: <%= ENV['db_user'] %>
  password: <%= ENV['db_pass'] %>
  host:     <%= ENV['db_host'] %>
  pool: 32
  socket:   <%= ENV['socket'] %>

development:
  <<: *default

production:
  <<: *default

Já corri tanto bundle updatee bundle installe meus shows Gemfile.lock mysql2.

No entanto, quando executo rake db:migrate, obtenho isso no meu computador e no servidor de teste:

myproject.com(master)$ rake db:migrate
WARNING: Use strings for Figaro configuration. 10000012508 was converted to "10000012508".
WARNING: Use strings for Figaro configuration. 860526407370038 was converted to "860526407370038".
rake aborted!
Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
.....

Apenas para ter certeza de que não havia uma versão ruim do mysql2 ou algo assim, bundle clean --forceexecutei bundle installe executei várias bundle updatevezes e quando executo gem list, vejo mysql2 (0.4.0)outras versões.

Qualquer idéia seria muito apreciada.


SOLUÇÃO

Atualmente, é um problema com o Rails 4.1.xe 4.2.x, de acordo com este relatório de bug , será corrigido na próxima versão do rails 4.2.x (crédito para dcorr nos comentários do link).

Enquanto isso, você pode corrigir fazendo o downgrade para a versão 0.3.18 do mysql2 adicionando esta linha ao seu gemfile:

gem 'mysql2', '~> 0.3.18'
newUserNameHere
fonte
1
Tentebundle update mysql2
Pavan
Eu tentei isso também. Não funcionou. Pelo que vejo, mysql2 (0.4.0)é a versão mais recente que o ruby ​​gems terá e já está instalado.
newUserNameHere
12
Aqui estava a solução: gem 'mysql2', '~> 0.3.18'no Gemfile.
newUserNameHere
6
Isso não é um bug do mysql2, é um problema com o requisito no adaptador ActiveRecord: github.com/rails/rails/issues/21544 . Isso é corrigido no mestre do Rails: github.com/rails/rails/commit/…
dcorr 8/15/15
@Pavan Awsome maahn !! _ / _
Varun

Respostas:

50

Apenas mais uma atualização - a solução na pergunta está correta.

Vale ressaltar o quarto comentário:

Isso não é um bug do mysql2, é um problema com o requisito no adaptador ActiveRecord: http://github.com/rails/rails/issues/21544 . Isso é corrigido no mestre de trilhos: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Consegui amarrar Rails 4.2.4ao 4-2-stableramo e fazê-lo funcionar com as últimas mysql2:

insira a descrição da imagem aqui

gem 'rails', '~> 4.2.4', git: "git://github.com/rails/rails.git", branch: '4-2-stable'
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw] #-> Rails 4.1+

#DB
gem 'mysql2'
Richard Peck
fonte
Se a velocidade é uma prioridade, foi um pouco mais rápido baixar o mysql2 para '0.3.20' em vez de fixar os trilhos '4.2.4' no ramo: '4-2-stable'.
precisa saber é o seguinte
é difícil acreditar que gem mysql tem tantos problemas de buggy mesquinho compara a postgreSQL T__T
newBike
É o ambiente do Windows - é o mesmo com Imagemagick etc. Você tem que usar as dependências externas, e uma vez que o Windows não tem um repositório central para eles, fica complicado
Richard Peck
E o Rails 5?
Richard Peck
@RichardPeck Estou com este problema com o Rails 5.0.3 #
garci560 17/17
67

Apenas faça:

gem 'mysql2', '~> 0.3.18' esta jóia trabalha com rails version 4.x.x

se instalar gem 'mysql2', '~> 0.4.0', gera erro de carregamento de gema e causa problemas de compatibilidade

Kaleem Ullah
fonte
Limpo, simples e conciso. Obrigado!
Am33d 17/07/19
Trabalhou para mim @kaleem
khalidh
9

Esse problema foi solucionado aqui: https://github.com/brianmario/mysql2/issues/950

Para o Rails 4.x, fixe a gema no mysql2 '~> 0.4.0' para evitar a atualização do 0.5.x.

Gemfile:

gem 'rails', '4.2.8'
gem 'mysql2', '~> 0.4.0'

Então corra bundle update rails mysql2

Atualmente, estou usando o mysql v 8.0.11

Abram
fonte
8

A resposta para essa pergunta específica em relação a quando ela foi publicada e a versão do Rails sendo usada é que o problema é causado pela execução de um bundle update ae sua versão do mysql2 é atualizada para 0.4.x, que tem um problema de incompatibilidade com o Rails ActiveRecord mais recente.

Novamente, observe que essa NÃO é a solução para pessoas que usam versões mais antigas do Rails / ActiveRecord.

A solução rápida é simplesmente especificar a mysql2versão no seu gemfile da seguinte maneira:

gem 'mysql2', '0.3.20'

A solução longa seria esperar por uma atualização no ActiveRecord ou algo no mysql2 mudar.

Joshua F. Rountree
fonte
7

Se você puder atualizar sua versão do rails, altere seu Gemfile para isso e ele resolverá o problema sem fazer o downgrade da versão do mysql2 gem:

gem 'rails', '4.2.6'
Omac
fonte
5

Como um iniciante completo, fiquei confuso sobre como fazer isso, então fiz uma verificação de teste e finalmente consegui meu servidor funcionando. Aqui está como eu o fiz funcionar.

entre no arquivo do diretório de trabalho ("trabalho") e, a partir daí, entre no arquivo do aplicativo que você criou ("sample_app") que possui o mysql 2 instalado, vá para o arquivo gem ("Gemfile") edite a gem 'mysql2' para gem 'mysql2', '~> 0.3.18'

Agora volte ao cmd e execute o comando "bundle install".

portanto, o diretório para editar o arquivo levando em consideração os arquivos acima entre parênteses. "c \ work \ sample_app \ Gemfile"

Espero ter ajudado.

avinash vp
fonte
4

Isso geralmente acontece quando você está perdendo alguns pacotes mysql em sua máquina. Você recebe algum erro gem install mysql2? Em que sistema operacional você está trabalhando?

Se no debian ou no ubuntu tente sudo apt-get install libmysqlclient-dev .

Verifique também se a gema não está dentro de uma groupdeclaração no seu Gemfile.

EF
fonte
+1 para a assistência. No entanto, eu já tenho libmysqlclient-dev, e a gema não está dentro de uma declaração de grupo. O estranho é que funciona bem nos meus outros projetos, mas não neste. Além disso, esta não é uma nova instalação do meu sistema operacional. Não mudei nada no meu ambiente por algum tempo. E o mesmo se aplica ao servidor intermediário, onde também estou vendo os mesmos problemas.
newUserNameHere
1

Tinha o mesmo problema, mas adicionando source 'https://rubygems.org' ao topo do arquivo gem problema resolvido.

Passos:

adicione source 'https://rubygems.org'ao seu arquivo gem. Comente mysql2 geme adicione gem 'mysql2', '~> 0.3.18' Executarbundle install

Mr94
fonte
0

tente isto:

bundle update mysql2

este comando atualizará sua gema 'mysql2' para a versão mais recente (deve ser 0.3.17 ou superior) e iniciará o servidor rails.

mmike
fonte