Поддержка Rails 2 и Rails 3 в драгоценных камнях

Мне интересно, есть ли какие-нибудь драгоценные камни, которые поддерживают как Rails 2, так и Rails 3? Если да, то как они это делают? Простые условия в коде?

Это связано с моим предыдущим вопросом: Упаковка моделей Rails 2.3

Наше веб-приложение работает на Rails 2, но новым приложением API будет Rails 3. Между ними уже есть некоторые незначительные несовместимости, которые можно легко исправить с помощью сценария выпуска или условий выполнения.

[править] Мы планируем, что в конечном итоге и сервер API, и сервер приложений будут работать на Rails 3, так что это будет временно. В настоящее время я думаю, что решение if-def может быть самым простым и легким. (См.: http://www.infoq.com/presentations/Simple-Made-Easy. )


person GrooveStomp    schedule 16.01.2012    source источник


Ответы (1)


Если у вас есть незначительные различия между Rails 2 и 3 (например, переименованный метод), вы должны использовать несколько условных выражений. Вот пример из Haml-rails

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

Если у вас есть серьезные различия, вы должны держать два отдельных драгоценных камня. Например, will_paginate имеет версию 2.3 для Rails 2 и версию 3.0 для Rails 3 из-за серьезного рефакторинга в Active Directory. Запись 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. Последние два будут зависеть от ядра и повторно использовать один и тот же независимый от рельсов код.

person Simon Perepelitsa    schedule 16.01.2012