2014-07-11 25 views
3

我的基本堆棧設置是Ubuntu 10.04 Lucid,Apache2和Rails 3.x(見下文)。它還使用在專用服務器上運行的MySQL數據庫,所以我只需要Rails服務器上的MySQL客戶端,並使用mysql2 gem。混合Ruby版本和MySql客戶端的問題

我正在升級Rails應用程序,從Rails 3.0到Rails 3.2,都進行得相當不錯(只需要更改一些代碼和一些重新組織資源),除了我需要從Ruby 1.8.7升級到更高版本版本的郵件寶石。

我想我會跳過Ruby 1.9.3,直接跳到Ruby 2.0.0。

我也在咬牙切齒,採用rvm來管理ruby環境,並且也更新到Passenger 4,因爲它表示這對rvm更好用,並且還因爲我有另一個我想要的Rails應用程序暫時留在Ruby 1.8.7上。

所有工作都進行得相當順利 - 在安裝過程中,一切安裝都沒有錯誤。

我在應用程序目錄層次結構的頂部添加了一個.ruby-version文件(指定爲2.0.0),這似乎很有效。

我也有.ruby-gemset在同一個目錄下,指定一個應用程序名稱,並且我已經使用bundle install安裝了必要的gem。

然而,當我重新啓動Apache,並嘗試訪問的Rails應用程序,我得到返回的網頁上乘客報告了一個錯誤,

Web application could not be started 

/home/username/.rvm/gems/[email protected]/gems/mysql2-0.3.16/lib/mysql2/mysql2.so: [BUG] Segmentation fault ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux] 

看來,Rails應用程序(或乘客)是正確地獲取rvm環境,然後使用具有Ruby 1.8.7依賴項的不兼容版本的mysql2。

我試過很多事情要解決這個問題,

  • 刪除並重新安裝mysql2寶石。
  • 卸下和使用sudo重新安裝MySQL客戶端包apt-get安裝的libmysqlclient-dev的 的libmysql-紅寶石
  • 嘗試相同的變化,但使用Ruby 1.9.3,而不是2.0.0。

理想情況下,我希望mysql2支持同時使用Ruby 1.8.7和2.0.0應用程序,但是我也想讓mysql2能夠與更高版本的Ruby一起工作。

建議感激。

+1

您是否在應用程序的虛擬主機中設置了「PassengerRuby」,因爲它是在[rvm doc](https://rvm.io/integration/passenger)中編寫的? – zergood

回答

1

您應該在應用的虛擬主機中設置PassengerRuby,因爲它是在rvm doc中編寫的。