在使用Ruby 1.9.2.rc2 RVM下运行的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堆栈,而不是直接在相同环境下使用续集的脚本。

虽然包本身并没有负载和MySQL驱动程序不工作,警告序跋任何运行的这个巨大的堆通过导轨。通常这个结果从Rails环境中的mysql宝石某处的冗余负载。宝石在Gemfile中宣称:

gem 'rails', '3.0.0.rc'

gem 'haml'
gem 'sequel'

gem 'mysqlplus'
gem 'mysql'

我想这是Rails自动加载不理解MySQL库已加载,并重新装入。有一种简单的方法来解决这个问题?

<强>更新

加载mysqlmysqlplus但不能同时在同一时间或你会得到这样的警告。 mysqlplus包括所有的mysql的功能和是续集的依赖关系。

有帮助吗?

解决方案

你需要的MySQLPlus宝石?我使用的Rails 3只的MySQL 2.8.1:

gem 'mysql', '2.8.1'

虽然我没有使用过的MySQLPlus,我猜测它设置你看到的警告常数,然后将MySQL的宝石在加载时再次设置这些常量。

<强>更新:使用mysql2代替

#gem 'mysql', '2.8.1'
gem 'mysql2'

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

development:
  #adapter: mysql
  adapter: mysql2
  database: somedatabase_development
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top