【问题标题】:Is there a way to upgrade from Ruby 1.8.7 to 1.9.2 without having to reinstall gems and rails?有没有办法从 Ruby 1.8.7 升级到 1.9.2 而无需重新安装 gems 和 rails?
【发布时间】:2011-11-11 01:42:12
【问题描述】:

更多细节...我有一台 CentOS 机器,它与其他 Apache/httpd 项目 (PHP) 一起运行 Passenger,我想知道是否有某种方法可以在不破坏任何当前正在运行的项目的情况下升级我的 Ruby 版本。我发现了很多关于升级的例子,它们都很好,但它们都包括重新安装 rails,在某些情况下还包括 ruby​​gems。他们甚至要求您在控制器中传递一些代码来编码 utf-8。没有时间这样做,因为它是运行尖锐项目的实时服务器。

我想知道你是否可以这样做:

例如

  1. 安装新的 Ruby 版本 2.修复所有符号链接
  2. 可能的捆绑更新
  3. 重启 Apache/httpd 服务器

我没有安装 RVM,因为我认为它比安装 Ruby 本身更麻烦。

每个人都在谈论 1.9.X 版本的性能,我认为它可能值得升级。

【问题讨论】:

    标签: ruby-on-rails ruby apache passenger centos


    【解决方案1】:

    AFAIK - 不,您不能这样做,因为某些 gem(包括乘客)具有本机扩展(阅读:具有用 C 编写的部分),这些扩展是使用 1.8.7 版本的标头/代码编译的。它们很可能与 ruby​​ 1.9.x 不兼容。此外,ruby 的 stdlib 位于不同的位置(也许这可以被一些环境变量改变?)。但是,主要问题仍然是 gems 的原生扩展。

    【讨论】:

    • 哦.. 真不幸。好像在那段时间不会升级,但还是谢谢。
    【解决方案2】:

    如果您将 Ruby 1.9.2 安装到不同的位置(例如 /usr/bin/ruby1.9 或 /usr/local/bin/ruby),您可以在没有重大停机时间的情况下进行更新。不过,您必须重新编译您的 gem。

    1. 安装 Ruby 1.9.2
    2. 重新编译Passenger并配置Apache以使用这个passenger和新的Ruby解释器(暂时不要重启)
    3. 使用新的 Ruby 解释器部署您的应用程序,捆绑 gems
    4. 重启 Apache

    还没有尝试过,所以请等待一些 cmets 了解此工作流程中的缺陷。

    也可以使用Passenger 3 在同一个网络服务器中使用多个ruby 版本,详情请参阅http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/。您可以单独设置一个 ruby​​ 1.9 应用程序,并在切换之前测试所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多