web-dev-qa-db-ja.com

mysqlでのRubyGemの問題

少し混乱しています... 2.1.1からアップグレードした後、サーバーでRails 2.3.2が実行されています。mongrelクラスターを起動しようとすると、次のエラーが発生します。

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

これは何が原因ですか?終わったよ:

gem install mysql

...インストールするためのさまざまなパス固有の魔法がすべて含まれています。グーグル検索はいくつかの同様の問題を明らかにしますが、明らかな解決策はありません。何か案は?

詳細情報:

バージョン:Rails 2.3.2(gem経由)、RubyGems 1.3.4(gem経由)、Ruby 1.8 .5(yum経由)、Linux 2.6.18-xen(CentOS5.2)。

MySQLアダプタ(gem install mysql)は2.7です。

奇妙なことに、mysqlアダプターを削除すると(gem uninstall mysql)組み込みの(遅いですが...?)MySQLアダプターに戻ると思います。動作に違いはありません。

1
Andrew Flanagan

これの根本的な原因は、Rails 2.3の機能で、外部gemがすべてバンドルされるのではなく、接続アダプターを提供できるようにすることです。厄介な詳細はactiverecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rbにあります。興味はありますが、その長所と短所は、betain_connectionが最初に実行しようとするのはgemをロードすることであり、それが「従来の」require(組み込みのmysqlアダプターをロードする)を実行できない場合です。

「失敗」の合図はLoadErrorを上げることによって行われ、ここで物事が煩わしくなります。 Rubygemsには独自のLoadErrorクラス(Gem::LoadError)があり、I thinkこれが問題の原因であり、activerecordが(予期される)ことを適切に検出していません。障害が発生したため、接続アダプターをローカルにロードしようとするのではなく、爆撃が発生しました。

おそらく将来後悔するであろう厄介なことは、activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rbの72行目を次のように変更することです。

rescue LoadError, Gem::LoadError

これを修正する適切な方法は、これを引き起こすために環境で何が問題になっているのかを解明することです(明らかに誰にとっても壊れないため)。私の最初の推測は、古いバージョンのRubyGems(バージョン1.3.3のrubygems.rbの578行目はロードエラーとは何の関係もありません)、または奇妙な(おそらく古い)を実行していることです。 Rubyのバージョン。私はあなたが最新のRubygemsを実行していることを確認します(Rails 2.3は正しく実行するために少なくとも1.3.1を必要とします、それはあなたが打っているものかもしれないと私は考えています)そしてあなたのRubyバージョンはそれほど多くありません(1.8.6または1.8.7を使用してください。あなたの状況で1.9を使用することには注意が必要です)。

すべてを正常に実行しても問題が解決しない場合は、システムの完全な詳細(OS、ディストリビューション、Ruby/ruby​​gemsのソース(パッケージ、ソースからなど)、上記のすべてのバージョン、カスタマイズ)を入力してください。誰かが問題を解決することができます。現状では、問題の追跡に役立つ情報は提供されていません。

2
womble