【发布时间】:2010-08-06 17:49:23
【问题描述】:
在 RVM 下运行带有 Ruby 1.9.2.rc2 的 Rails 3 RC 时,我不断从 MySQL 驱动程序包中收到大量错误,如下所示:
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant MysqlRes
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant MysqlField
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant MysqlError
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant VERSION
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant OPT_CONNECT_TIMEOUT
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant OPT_COMPRESS
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant OPT_NAMED_PIPE
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant INIT_COMMAND
这会出现在rails console 和单元测试中,任何需要完整 Rails 堆栈的东西,但不是在同一环境中直接使用 Sequel 的脚本。
尽管捆绑包本身确实加载并且 MySQL 驱动程序确实工作,但大量的警告是通过 Rails 运行的任何东西的前言。通常这是由于 Rails 环境中某处的 mysql gem 的冗余负载造成的。 gem 在 Gemfile 中声明:
gem 'rails', '3.0.0.rc'
gem 'haml'
gem 'sequel'
gem 'mysqlplus'
gem 'mysql'
我想这是 Rails 自动加载器无法理解 Mysql 库已经加载,并再次加载它。有没有简单的方法来解决这个问题?
更新:
加载 mysql 或 mysqlplus 但不能同时加载两者,否则您会收到这样的警告。 mysqlplus 包含 mysql 的所有功能,并且是 Sequel 的依赖项。
【问题讨论】:
-
我已将范围缩小到
mysqlplusgem,但无法确定原因。
标签: ruby-on-rails ruby-1.9 bundler sql