2010-06-04 3 views
10

J'ai un projet Rails 2.3.5 qui utilise les fonctions de localisation de Rails. J'ai aussi Rails 3 beta installé (qui dépend de la gemme i18n). Rails 2.3.5 se chargera volontiers de la localisation par lui-même (sans i18n installé), mais si la gemme i18n est disponible, elle s'en sert.Have Rails 2.3.x ignore la gemme i18n

Récemment, j'ai mis mes gemmes à jour et j'ai maintenant installé les versions 0.3.7 et 0.4.0 de i18n. Rails, bien sûr, veut charger et utiliser la dernière version qui provoque des erreurs dans mon projet. J'ai essayé de régler la version de gem à 0.3.7 qui contourne les erreurs dans l'application web. Cependant, nous utilisons resque et resque_mailer pour retarder l'envoi des messages. Lorsque le travailleur récupère le travail de publipostage de la file d'attente, il ignore mon exigence config.gem dans environment.rb et utilise de toute façon la version 0.4.0.

Idéalement, j'aimerais dire à Rails de ne pas utiliser du tout la gemme i18n. Comment je fais ça?

Mise à jour: À partir de la version bêta 4, Rails 3 requiert maintenant la version 0.4.1 d'i18n. Je ne vois pas comment plus de gens ne se heurteraient pas à ce problème, car il semblerait maintenant que vous ayez installé Rails 2 et Rails 3, vous allez être confronté à cela.

Répondre

5

J'ai suivi les instructions telles que définies ici:

http://gembundler.com/rails23.html

et cela a fonctionné.

+0

Upvote pour bundler. Depuis que je l'ai posté, bundler est passé à la version 1.0 et devient beaucoup mieux. Il est très facile à configurer dans les projets Rails 2.3 et Rails 3. C'est la solution que j'utiliserais à l'avenir. – Jared

+0

Merci ... vraiment une gud soln a réglé mon problème. –

3

Vous pouvez utiliser Bundler ou RVM Gemsets pour rendre la gemme i18n indisponible à partir de votre application. Ou vous pouvez mettre à jour votre application Rails.

+0

Bien que ce soit une réponse valide, ce n'est pas le genre de réponse que je recherche. J'utilise déjà RVM, mais beaucoup de gens ne le sont pas. Il devrait y avoir un moyen de gérer complètement cela depuis Rails si cela doit être une fonctionnalité de Rails. Vous ne devriez pas avoir à installer et à configurer RVM pour gérer une fonctionnalité de Rails elle-même. – Jared

+1

Ceci est possible à partir de "Rails 3" car il est livré avec Bundler. RubyGems n'a aucune option pour désactiver complètement un Gem. Bien que vous puissiez explicitement activer une ancienne version de i18n, la seule façon de l'extraire de votre chemin de chargement serait de ne pas utiliser de rubygems. –

+1

Vous pouvez également convertir un projet de rails plus anciens pour utiliser le bundler gem. Gem bundler a la capacité de désactiver les gemmes du système, en ne comptant que sur les gemmes du bundle. Il a également une gestion des dépendances de loin supérieure. Temps d'installation: 15 minutes –

2
  1. Bloquée la version Rails: rake VERSION=2.3.5 rails:freeze:gems
  2. Fix la version du fournisseur de fichiers/rails/activesupport/lib/active_support/vendor.rb ligne 24: gem 'i18n', '>= 0.1.3', '< 0.4.0'
+0

L'erreur est corrigée afin de libérer et de mettre à jour les rails. mise à jour de gemme; rails de râteau: dégeler – wingfire

2

Ou tout simplement modifier: /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor.rb

Et tourner gem 'i18n', '>= 0.1.3'

Dans gem 'i18n', '0.1.3'