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.