支持gem中的Rails 2和Rails 3

时间:2012-01-16 20:51:05

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

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

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

我们的webapp在Rails 2上,但新的API应用程序将成为Rails 3.两者之间已经存在一些轻微的不兼容性,这些不兼容性很容易通过发布脚本或运行时条件修复。

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

1 个答案:

答案 0 :(得分: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个宝石:mygem(核心),mygem-rails2,mygem-rails3。后两者将依赖于核心并重用相同的与轨道无关的代码。