“SystemTimer”的未定义方法“name”:String

时间:2011-05-19 21:20:07

标签: ruby-on-rails ruby ruby-on-rails-2

我在使用旧的Ruby on Rails 2应用程序时遇到问题,该应用程序在一年内没有工作。

我正在尝试在项目目录的根目录中运行rake test:functionals,但我正在获取undefined method 'name' for "SystemTimer":String

我已经粘贴了我认为与此问题相关的所有内容: http://pastebin.com/NgBvystZ

另外,当我自己跑rake时,我明白了 Errors running test:units! 不知道如何调试。

我复制并粘贴了一些我认为对理解这个问题有用的东西。非常感谢您的时间。谢谢。

2 个答案:

答案 0 :(得分:54)

这是大于1.3.7的RubyGems版本与小于2.3.12的Rails版本之间的不兼容性。有几种方法可以解决这个问题。

  1. 使用Bundler

    Bundler是easy to install,修复了这个问题,并且还有许多其他优点。我强烈推荐它。

  2. 升级到Rails 2.3.12或更高版本

    Rails 2.3.12修复了RubyGems 1.8.5的兼容性问题(参见release report)。

  3. 降级为RubyGems 1.3.7

    除非你别无选择,否则我不建议这样做。使用此命令:gem update --system 1.3.7。此外,版本1.7.2具有部分兼容性(它将运行,但冻结宝石将失败,并且可能存在其他问题)。

答案 1 :(得分:4)

我偶然遇到这个帖子,因为在将一些Radiant 0.9.1安装迁移到新服务器时出现以下错误:

undefined method `name' for "RedCloth":String
  

(3)妥协的解决方案:我没有亲自测试过,但我听说带有捆绑器的rails 2.3与最新的rubygems兼容。如果您对此解决方案感兴趣,请参阅http://gembundler.com/rails23.html以获取Bundler在rails 2.3下工作。

对我来说,解决方案3是唯一的选择,因为我们有其他应用需要系统上最新的rubygems。 只需安装bundler并按照此页面上的步骤操作: http://gembundler.com/rails23.html

并将其放在app root中名为“Gemfile”的文件中:

source :gemcutter
gem "radiant", "0.9.1"
gem "sanitize"
gem "fastercsv"
gem "rmagick"
gem "rack", "~> 1.1.0"
gem "rake", ">= 0.8.3"
gem "RedCloth", ">= 4.0.0"
gem "will_paginate", "~> 2.3.11"
gem "mysql"

这只是我的榜样。从仅前两行开始,运行bundle update并重新加载页面以查看您可能缺少的其他内容。

谢谢Ben!