我有点困惑...从 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(CentOS 5.2)。
MySQL 适配器 ( gem install mysql
) 是 2.7。
奇怪的是,如果我删除了 mysql 适配器(gem uninstall mysql
),我希望它恢复为内置的(虽然很慢......?) MySQL 适配器。它的作用没有任何不同。
其根本原因是 Rails 2.3 允许外部 gem 提供连接适配器的特性,而不是将它们全部捆绑在一起。如果您有兴趣,血淋淋的细节就在
activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rb
里面,但总而言之,建立连接将尝试做的第一件事是加载一个 gem,如果它未能执行“传统”要求(它将加载内置的 mysql 适配器)。发出“失败”的信号是通过 raise 来完成的
LoadError
,这就是事情变得烦人的地方。Rubygems 有它自己的类LoadError
(本地。Gem::LoadError
您将来可能会后悔的做法是将
activerecord-2.3.2/lib/active_record/connection_adapters/abstract/connection_specification.rb
第 72 行更改为:解决此问题的正确方法是找出导致此问题的环境中出了什么问题(因为它显然不会对每个人造成破坏)。我的第一个猜测是您正在运行旧版本的 RubyGems(例如 1.3.3 版中 rubygems.rb 的第 578 行与加载错误无关),或者是一个奇怪的(可能已过时)红宝石版本。我会确保您运行的是最新的 Rubygems(Rails 2.3 至少需要 1.3.1 才能正常运行,我想这可能是您正在遇到的问题)并且您的 Ruby 版本不是太外面了(使用 1.8.6 或 1.8.7,我会警惕在您的情况下使用 1.9)。
如果您运行一切正常并且问题仍然存在,请提供您系统的完整和完整的详细信息(操作系统、发行版、Ruby/rubygems 的源代码(包、来自源代码等)、上述所有版本、任何自定义)和有人可以解决问题。就目前而言,您没有提供任何信息来帮助任何人帮助追踪问题。