2011-05-19 4 views
12

J'ai un problème pour obtenir une ancienne application Ruby on Rails 2 qui n'a pas fonctionné depuis un an.Méthode non définie `nom 'pour" SystemTimer ": Chaîne

J'essaie d'exécuter rake test:functionals à la racine de mon répertoire de projet, mais je reçois undefined method 'name' for "SystemTimer":String.

J'ai tout collé que je crois pertinente au problème ici: http://pastebin.com/NgBvystZ

Aussi, quand je lance rake lui-même, je reçois Errors running test:units! Je ne sais pas comment déboguer.

J'ai copié et collé tout ce que je pense serait utile pour comprendre ce problème. Votre temps est grandement apprécié. Je vous remercie.

+0

Avez-vous la gemme [SystemTimer] (http://systemtimer.rubyforge.org/) dans votre Gemfile? – monocle

+0

Un autre signe: méthode indéfinie 'name 'pour" bundler ": String – rogerdpack

Répondre

54

Il s'agit d'une incompatibilité entre les versions de RubyGems supérieures à 1.3.7 et les versions de Rails inférieures à 2.3.12. Il y a plusieurs façons de résoudre cela.

  1. Utilisez Bundler

    Bundler est easy to install, résout ce problème, et a un certain nombre d'autres avantages. Je le recommande fortement.

  2. Mise à jour vers Rails 2.3.12 ou supérieur

    Rails 2.3.12 des problèmes de compatibilité avec RubyGems 1.8.5 (voir release report).

  3. mise à niveau inférieur à RubyGems 1.3.7

    Je ne recommande sauf si vous avez pas d'autre choix. Utilisez cette commande: gem update --system 1.3.7. De plus, la version 1.7.2 a une compatibilité partielle (elle fonctionnera, mais le gel des gemmes échouera et il y a probablement d'autres problèmes).

+2

Vous avez raison. C'était la solution. J'ai dû trouver les bons paquets à utiliser avec ruby ​​car les développeurs RoR ne sont pas des fans de rétrocompatibilité dans tous les sens du mot. J'ai réussi à trouver une ancienne liste de paquets avec les numéros de version et cela m'a sauvé. – sneilan

+1

+1 Je ne peux pas assez critiquer cet article. Je vous remercie! –

+1

Ajout de Bundler à un projet Rails 2 est très facile et résout ce problème. Si vous n'utilisez pas rvm et que vous avez plusieurs sites sur le même serveur, faites ceci: 'bundle install --path vendor/bundle' pour obtenir une copie isolée de vos gemmes. – Kris

4

Je suis tombé sur ce fil, parce que je suis l'erreur suivante lors de la migration des installations 0.9.1 Radiant vers un nouveau serveur:

undefined method `name' for "RedCloth":String 

(3) La solution compromettante: havre de paix I J'ai testé cela personnellement, mais j'ai entendu dire que les rails 2.3 avec bundler sont compatibles avec les derniers rubygems. Si cette solution vous intéresse, voir http://gembundler.com/rails23.html pour que le bundler fonctionne sous des rails. 2.3.

Pour moi, la solution 3 était la seule option, puisque nous avions d'autres applications nécessitant les derniers rubygems sur le système. Il suffit d'installer Bundler et suivez les étapes thes sur cette page: http://gembundler.com/rails23.html

Et mettre cela dans un fichier appelé « Gemfile » dans la racine de l'application:

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" 

Ceci est juste mon exemple. Commencez avec seulement les 2 premières lignes, exécutez bundle update et rechargez la page pour voir ce que vous pourriez manquer.

Merci Ben!

Questions connexes