Have Rails 2.3.x игнорировать i18n gem

У меня есть проект Rails 2.3.5, который использует функции локализации Rails. У меня также есть установленная Rails 3 бета (которая зависит от жемчуга i18n). Rails 2.3.5 с радостью справится с локализацией (без установки i18n), однако, если i18n gem доступен, он использует его.

Недавно я обновил свои драгоценные камни и теперь имею версию 0.3.7 и 0.4.0 из i18n. Rails, конечно же, хочет загрузить и использовать последнюю версию, которая вызывает ошибки в моем проекте. Я попытался установить версию gem на 0.3.7, которая обходит ошибки в веб-приложении. Однако мы используем resque и resque_mailer для задержки отправки сообщений. Когда рабочий выбирает задание почтовой программы из очереди, он игнорирует мое требование config.gem в environment.rb и в любом случае использует версию 0.4.0.

В идеале я хотел бы сказать, что Rails просто не использовал жемчужину i18n. Как это сделать?

Обновление: Начиная с бета-версии 4, Rails 3 теперь требует i18n версии 0.4.1. Я не вижу, как больше людей не сталкиваются с этой проблемой, как казалось бы сейчас, если у вас установлены Rails 2 и Rails 3, вы столкнетесь с этим.

Ответ 2

Вы можете использовать Bundler или RVM Gemsets, чтобы сделать жемчужину i18n недоступной из вашего приложения. Или вы можете обновить приложение Rails.

Ответ 3

  • Заморозить версию рельсов: rake VERSION=2.3.5 rails:freeze:gems
  • Исправить версию в файле vendor/rails/activesupport/lib/active_support/vendor.rb, строка 24: gem 'i18n', '>= 0.1.3', '< 0.4.0'

Ответ 4

Или просто отредактируйте: /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor.rb

И включите gem 'i18n', '>= 0.1.3'

В gem 'i18n', '0.1.3'