【发布时间】:2014-09-02 05:28:23
【问题描述】:
我的基本堆栈设置是 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。
一切都进行得相当顺利——在安装过程中,一切似乎都安装无误。
我在应用目录层次结构的顶部添加了一个 .ruby-version 文件(指定 2.0.0),这似乎有效。
我在同一目录中也有 .ruby-gemset,指定了一个应用程序名称,并且我已经使用 bundle install 安装了必要的 gem。
但是,当我重新启动 Apache 并尝试访问 Rails 应用程序时,我在返回的网页上收到了乘客报告的错误,
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
- 尝试相同的更改,但使用 Ruby 1.9.3 而不是 2.0.0。
理想情况下,我希望 mysql2 同时支持 Ruby 1.8.7 和 2.0.0 应用程序,但我也愿意让 mysql2 与更高版本的 Ruby 一起工作。
建议表示赞赏。
【问题讨论】:
-
你是否在应用程序的虚拟主机中设置
PassengerRuby,因为它是用rvm doc写的?
标签: mysql ruby-on-rails-3 ruby-on-rails-3.2 rvm ubuntu-10.04