-1

在 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 库已经加载,并再次加载它。有没有简单的方法来解决这个问题?

更新:

加载mysqlmysqlplus同时加载,否则你会收到这样的警告。mysqlplus包括 Sequel 的所有功能mysql并且是 Sequel 的依赖项。

4

1 回答 1

1

你需要mysqlplus gem吗?我正在使用只有 mysql 2.8.1 的 Rails 3:

宝石'mysql','2.8.1'

虽然我没有使用过 mysqlplus,但我猜测它设置了您在警告中看到的常量,然后 mysql gem 在加载时再次设置这些常量。

更新:改用mysql2

#gem 'mysql','2.8.1'
宝石'mysql2'

您还需要在 database.yml 中更新数据库适配器:

发展:
  #适配器:mysql
  适配器:mysql2
  数据库:somedatabase_development
于 2010-08-17T14:21:32.443 回答