【问题标题】:Support both Rails 2 and Rails 3 in gem在 gem 中同时支持 Rails 2 和 Rails 3
【发布时间】:2012-01-16 20:51:04
【问题描述】:

我想知道是否有支持 Rails 2 和 Rails 3 的 gem?如果是这样,他们是如何做到的?代码中的简单条件?

这与我之前的问题有关: Packaging Rails 2.3 Models

我们的 web 应用在 Rails 2 上,但新的 API 应用将是 Rails 3。两者之间已经存在一些小的不兼容性,可以通过发布脚本或运行时条件轻松修复。

[编辑] 我们确实计划最终让 API 服务器和 App 服务器都运行在 Rails 3 上,所以这只是暂时的。我目前的想法是 if-def 解决方案可能是最简单和最容易的。 (见:http://www.infoq.com/presentations/Simple-Made-Easy

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 gem ruby-on-rails-2


    【解决方案1】:

    如果您在 Rails 2 和 3 之间有一些细微差别(例如重命名的方法),您应该使用一些条件句。这是来自 Haml-rails 的 an example

      if ::Rails.version.to_f >= 3.1
        config.app_generators.template_engine :haml
      else
        config.generators.template_engine :haml
      end
    

    如果您有重大差异,您应该保留两个单独的宝石。例如,will_paginate 有 Rails 2 的 2.3 版本和 Rails 3 的 3.0 版本,因为 Active Record 3 中进行了重大重构。只有第 3 版本正在开发中。

    Record.find(:all, :conditions => { :foo => 'bar' }, :limit => 5) # Rails 2
    Record.where(:foo => 'bar').limit(5) # Rails 3
    

    在这种情况下,如果您必须维护两个版本,您可能还需要考虑 3 个 gem:mygem(核心)、mygem-rails2、mygem-rails3。后两者将依赖于核心并重用相同的独立于 Rails 的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      相关资源
      最近更新 更多