让Rails 2.3.x忽略i18n gem

10

我有一个使用Rails 2.3.5的项目,其中使用了Rails的本地化功能。我还安装了Rails 3 beta版(依赖于i18n gem)。Rails 2.3.5可以独自处理本地化(无需安装i18n),但如果i18n gem可用,则会使用它。

最近我升级了gems,并安装了版本为0.3.7和0.4.0的i18n。当然,Rails想要加载并使用最新版本,这导致我的项目出错。我尝试将gem版本设置为0.3.7,从而绕过Web应用程序中的错误。但是,我们正在使用resque和resque_mailer来延迟消息发送。当工作进程从队列中拾取mailer job时,它会忽略环境文件environment.rb中的config.gem要求,仍然使用版本0.4.0。

理想情况下,我希望告诉Rails根本不要使用i18n gem。我该怎么做?

更新:自beta 4以来,Rails 3现在需要i18n版本0.4.1。我不明白为什么没有更多人遇到这个问题,因为现在如果您同时安装了Rails 2和Rails 3,您将遇到这种情况。

4个回答

5

点赞支持 bundler。自从我发布这篇文章以来,bundler 已经更新到了 1.0 版本,并且变得更加优秀。在 Rails 2.3 和 Rails 3 项目中都非常容易设置。这是我今后会使用的解决方案。 - Jared

3

您可以使用Bundler或者RVM的Gemsets,使得i18n gem在您的应用内不可用。或者您可以升级您的Rails应用。


虽然那是一个有效的答案,但它并不是我要找的答案类型。我已经在使用RVM,但很多人并没有。如果这将成为Rails的一个特性,应该有一种完全从Rails内部处理它的方法。你不应该需要安装和设置RVM来管理Rails本身的一个特性。 - Jared
1
这是可能的,因为Rails 3内置了Bundler。RubyGems没有禁用Gem的选项。虽然您可以显式激活旧版本的i18n,但要将其从加载路径中删除的唯一方法就是根本不使用rubygems。 - Konstantin Haase
1
您可以将旧版本的Rails项目转换为使用Gem Bundler。Gem Bundler具有禁用系统Gem的功能,只依赖于bundle中的Gem。此外,它还具有更优秀的依赖管理能力。设置时间:15分钟。 - Luke Chadwick
如果您对RVM有进一步的问题,可以在freenode上的#rvm频道中随时找到愿意提供帮助的人:http://webchat.freenode.net/?channels=rvm。 - Konstantin Haase
我已经将你的答案标记为被接受的,Konstantin。我勉强开始使用gem sets来解决我的问题。然而,我仍然认为这不是最理想的解决方案。Rails应该有一些机制来指定“使用这个版本的i18n”,或者即使系统上有它,也可以选择不使用它。 - Jared

3
  1. 冻结Rails版本:rake VERSION=2.3.5 rails:freeze:gems
  2. 在文件vendor/rails/activesupport/lib/active_support/vendor.rb的第24行中修复版本为:gem 'i18n', '>= 0.1.3', '< 0.4.0'

错误已经修复,请解除冻结并更新Rails。 gem update; rake rails:unfreeze - wingfire

2

或者编辑:/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'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接