problema RubyGem com o mysql

1

Estou um pouco confuso ... Eu tenho o Rails 2.3.2 em execução no meu servidor após a atualização do 2.1.1 Eu recebo o seguinte erro nos meus clusters mestras quando eles tentam iniciar:

Exception 'Gem::LoadError' at /usr/lib/ruby/site_ruby/1.8/rubygems.rb:578 - Could not find RubyGem activerecord-mysql-adapter (>= 0)

Por que isso é causado? Eu fiz:

gem install mysql

... com todas as várias magias específicas do caminho para que seja instalado. Uma pesquisa no google revela alguns problemas semelhantes, mas sem resolução aparente. Alguma idéia?

Mais informações:

Versões: Rails 2.3.2 (via gem ), RubyGems 1.3.4 (via gem ), Ruby 1.8.5 (via yum ), Linux 2.6.18-xen (CentOS 5.2). / p>

O adaptador MySQL ( gem install mysql ) é 2.7.

O curioso é que, se eu remover o adaptador mysql ( gem uninstall mysql ), eu esperaria que ele fosse revertido para o adaptador MySQL embutido (embora lento ...?). Não age de forma diferente.

    
por Andrew Flanagan 13.06.2009 / 16:37

1 resposta

2

A causa subjacente disto é a característica do Rails 2.3 de permitir que gems externas forneçam adaptadores de conexão, ao invés de tê-los todos empacotados. Os detalhes são em activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rb se você estiver interessado, mas o longo e o curto é que a primeira coisa que o establish_connection tentará fazer é carregar uma gem, e se isso falhar em fazer um "tradicional" requerer ( que irá carregar o adaptador mysql embutido).

Sinalizar o "fracasso" é feito levantando LoadError , e aqui é onde as coisas ficam irritantes. Rubygems tem sua própria LoadError class ( Gem::LoadError ) e eu acho que é onde o problema está vindo, em que o activerecord não está detectando corretamente que a falha (esperada) ocorreu e então está bombardeando em vez de apenas tentar carregar o adaptador de conexão localmente.

O retorno que você provavelmente se arrependerá de fazer no futuro é alterar activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rb linha 72 para:

rescue LoadError, Gem::LoadError

A maneira correta de consertar isso é descobrir o que deu errado em seu ambiente para causar isso (já que obviamente isso não quebra para todos). Meu primeiro palpite é que você está executando uma versão antiga do RubyGems (a linha 578 do rubygems.rb na versão 1.3.3 não tem nada a ver com erros de carregamento, por exemplo), ou um estranho (possivelmente desatualizado) versão do Ruby. Eu me certificaria de que você está executando um Rubygems atualizado (o Rails 2.3 requer pelo menos 1.3.1 para rodar corretamente, o que eu acho que pode ser o que você está acertando) e que sua versão Ruby não é também lá fora (use 1.8.6 ou 1.8.7, e eu ficaria desconfiado de usar o 1.9 na sua situação).

Se você está correndo tudo bem e o problema persiste, dê detalhes completos do seu sistema (OS, distro, fonte de ruby / rubygems (pacote, da fonte, etc), versões de todos os acima, qualquer personalizações) e alguém pode colocar o problema em terra. Como está, você não deu nenhuma informação que ajude alguém a ajudar a rastrear o problema.

    
por 14.06.2009 / 01:29