我的基本堆栈设置是ubuntu 10.04lucid,带有apache2和rails 3.x(见下文)。它还使用在专用服务器上运行的mysql数据库,所以我只需要在rails服务器上使用mysql客户机,而且我使用的是mysql2 gem。
我正在将一个rails应用程序从rails 3.0升级到rails3.2,一切都进行得相当顺利(一些代码更改和一些资产重组),除了我需要为mail gem从ruby 1.8.7升级到更高版本。
我想我应该跳过Ruby1.9.3,直接跳到Ruby2.0.0。
我也在咬紧牙关,采用rvm来管理ruby环境,并更新到passenger 4,因为它说这对rvm更有效,而且还因为我有另一个rails应用程序,我想暂时留在ruby 1.8.7上。
一切都进行得相当顺利-一切似乎安装过程中没有错误。
我在app目录层次结构的顶部添加了一个.ruby版本文件(指定为2.0.0),这似乎是有效的。
我在同一个目录中还有.ruby gemset,指定了一个应用程序名,并且我使用bundle install安装了必要的gems。
但是,当我重新启动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环境,但是使用了一个不兼容的mysql2版本,该版本具有ruby 1.8.7的依赖性。
我试了很多方法来解决这个问题,
卸下并重新安装mysql2 gem。
使用sudo apt get install libmysqlclient dev删除并重新安装mysql客户端包
libmysql红宝石
尝试同样的改变,但是使用Ruby1.9.3而不是2.0.0。
理想情况下,我希望mysql2能同时支持ruby 1.8.7和2.0.0应用程序,但我也希望mysql2能与ruby的更高版本一起工作。
谢谢你的建议。

最佳答案

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

关于mysql - 将Ruby版本与MySql客户端混合的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24700254/

10-11 03:32
查看更多