2011-05-19 48 views
12

我在使用舊的Ruby on Rails 2應用程序時一年沒有工作就出現問題。「SystemTimer」的未定義方法「name」:字符串

我想在我的項目目錄的根目錄下運行rake test:functionals,但得到的是undefined method 'name' for "SystemTimer":String

我貼,我相信有關的問題就在這裏的一切: http://pastebin.com/NgBvystZ

此外,當我運行rake本身,我得到 Errors running test:units! 不知道如何調試。

我已經複製並粘貼了我認爲對理解此問題有用的所有內容。您的時間非常感謝。謝謝。

+0

你的Gemfile中是否有[SystemTimer](http://systemtimer.rubyforge.org/)gem? – monocle 2011-05-20 04:59:06

+0

另一個標誌:未定義的方法名稱爲「bundler」:字符串 – rogerdpack 2015-05-11 21:08:13

回答

54

這是大於1.3.7的RubyGems版本和小於2.3.12的Rails版本之間的不兼容性。有幾種方法可以解決這個問題。

  1. 使用捆紮機

    捆綁器easy to install,修復了這個問題,並且有許多其他優點。我強烈推薦它。

  2. 升級到滑軌2.3.12或更高

    滑軌與RubyGems的1.8.5(見release report)2.3.12固定的兼容性問題。

  3. 降級到1.3.7了RubyGems

    但我不推薦,除非你有沒有其他選擇。使用此命令:gem update --system 1.3.7。此外,版本1.7.2具有部分兼容性(它將運行,但凍結寶石將失敗並且可能存在其他問題)。

+2

你說得對。這是解決方案。我必須找到適合ruby使用的軟件包,因爲RoR開發人員不是任何詞彙的後向兼容粉絲。我設法找到了一個包含版本號的軟件包列表,這些軟件包保存了我。 – sneilan 2011-06-17 18:53:34

+1

+1我無法對這篇文章讚不絕口。謝謝! – 2011-07-28 16:31:30

+1

將Bundler添加到Rails 2項目非常簡單,可以解決此問題。如果你沒有使用rvm並且在同一臺服務器上有多個站點,可以這樣做:'bundle install --path vendor/bundle'來獲得一個你的gems的獨立副本。 – Kris 2012-01-16 19:54:58

4

我偶然發現這個線程,因爲我遷移一些輻射0.9.1安裝到新的服務器時,得到了以下錯誤:

undefined method `name' for "RedCloth":String 

(3)折衷的解決辦法:我的避風港我個人沒有測試過,但是我聽說rails 2.3與bundler兼容最新的rubygems。如果您對此解決方案感興趣,請參閱http://gembundler.com/rails23.html以使捆綁器在導軌2.3下工作。

對我來說,解決方案3是唯一的選擇,因爲我們有其他應用程序需要系統上的最新rubygems。 只要安裝捆綁並按照此頁面上採取這些步驟: http://gembundler.com/rails23.html

,並把這個在在應用程序根稱爲「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並重新加載頁面以查看可能缺少的內容。

謝謝你本!

相關問題