2010-08-06 55 views
-1

當在RVM下運行Rails 3 RC和Ruby 1.9.2.rc2時,我一直從MySQL驅動程序捆綁包中看到如下所示的大量錯誤:RVM和MySQL下的Ruby 1.9.2已經初始化了常量警告

/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環境中某處存在多餘的負載。創業板在Gemfile中宣稱:

gem 'rails', '3.0.0.rc' 

gem 'haml' 
gem 'sequel' 

gem 'mysqlplus' 
gem 'mysql' 

我想這是Rails自動加載不理解MySQL庫已加載,並重新裝入。有沒有簡單的方法來解決這個問題?

更新:

負載mysqlmysqlplus但不能同時在同一時間或你會得到這樣的警告。 mysqlplus包括mysql的所有功能,並且是Sequel的依賴項。

+0

我已經收窄到'mysqlplus'寶石,但無法證實原因。 – tadman 2010-08-09 16:14:02

回答

1

你需要mysqlplus gem嗎?我使用Rails 3,僅在MySQL 2.8.1:

gem 'mysql', '2.8.1'

雖然我沒有使用過的MySQLPlus,我猜測它設置你看到的警告常數,然後mysql的寶石再一次將這些常量當它被加載。

UPDATE:使用mysql2代替

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

您還需要更新您的數據庫適配器在database.yml中:

 
development: 
    #adapter: mysql 
    adapter: mysql2 
    database: somedatabase_development 
+1

經過更多研究,我在wycat的博客中發現了這一點: 「我們爲DataMapper構建的所有Data Objects驅動程序在進入其C代碼的阻塞區域時都會正確導致上下文切換mysqlplus gem於2009年3月發佈,被設計成爲mysql gem的替代品,但是解決了這個問題,由Brian Lopez編寫的新的mysql2 gem是舊版gem的一個替代品,也正確地處理了Ruby 1.9中的編碼,現在是Rails中新的默認MySQL驅動程序「。 – johnmcaliley 2010-08-17 14:45:00

+0

gem'mysql2'#在你的Gemfile中 – johnmcaliley 2010-08-17 14:46:14

+0

adapter:mysql2 #in database.yml – johnmcaliley 2010-08-17 14:46:34

相關問題