将Ruby版本与MySql客户端混合的问题

时间:2014-07-11 14:35:27

标签: mysql ruby-on-rails-3 ruby-on-rails-3.2 rvm ubuntu-10.04

我的基本堆栈设置是Ubuntu 10.04 Lucid,Apache2和Rails 3.x(见下文)。它还使用在专用服务器上运行的MySQL数据库,因此我只需要Rails服务器上的MySQL客户端,并且我正在使用mysql2 gem。

我正在升级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。

一切都进展顺利 - 在安装过程中似乎安装了一切都没有错误。

我在app目录层次结构的顶部添加了一个.ruby-version文件(指定2.0.0),这似乎是有效的。

我在同一目录中也有.ruby-gemset,指定了一个应用程序名称,并且我已经使用bundle install安装了必要的gem。

然而,当我重新启动Apache并尝试访问Rails应用程序时,我在返回的网页上收到Passenger报告的错误,

Web application could not be started

/home/username/.rvm/gems/ruby-2.0.0-p481@myapp/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应用程序(或Passenger)正在正确地获取rvm环境,但之后使用了具有Ruby 1.8.7依赖性的不兼容版本的mysql2。

我已经尝试了很多东西来解决这个问题,

  • 删除并重新安装mysql2 gem。
  • 使用sudo apt-get install libmysqlclient-dev删除并重新安装mysql客户端软件包 的libmysql旁注
  • 尝试相同的更改,但使用Ruby 1.9.3而不是2.0.0。

理想情况下,我希望同时支持同时使用Ruby 1.8.7和2.0.0应用程序的mysql2,但我也决定让mysql2与更高版本的Ruby一起使用。

建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

您应该在应用的虚拟主机中设置PassengerRuby,因为它是在rvm doc中写的。