在 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 运行的任何内容的前言。通常这是mysql
由于 Rails 环境中某处的 gem 的冗余负载造成的。gem 在 Gemfile 中声明:
gem 'rails', '3.0.0.rc'
gem 'haml'
gem 'sequel'
gem 'mysqlplus'
gem 'mysql'
我想这是 Rails 自动加载器无法理解 Mysql 库已经加载,并再次加载它。有没有简单的方法来解决这个问题?
更新:
加载mysql
或mysqlplus
同时加载,否则你会收到这样的警告。mysqlplus
包括 Sequel 的所有功能mysql
并且是 Sequel 的依赖项。