我想知道是否有任何支持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)
答案 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。后两者将依赖于核心并重用相同的与轨道无关的代码。