Gemspec non valide en raison du format de date dans la spécification


89

Quand j'inclus une gemme que j'ai faite, grâce à Bundler (version 1.0.12), dans un Gemfile et qu'ensuite j'essaye de grouper ou de ratisser juste comme ça:

$ rake

J'ai ce message d'erreur:

Invalid gemspec in [/Users/zagzag/.rvm/gems/ruby-1.9.2-p180@foobar/specifications/myplugin-1.0.0.gemspec]: invalid date format in specification: "2011-04-21 00:00:00.000000000Z"

Je suis sur le dernier Mac OS X (10.6.4), avec:

$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.4.0]

et:

$ gem -v
Invalid gemspec in [/Users/zagzag/.rvm/gems/ruby-1.9.2-p180@foobar/specifications/myplugin-1.0.0.gemspec]: invalid date format in specification: "2011-04-21 00:00:00.000000000Z"
1.7.2

Je ne vois vraiment pas comment résoudre ce problème. Merci pour toutes les idées.


Je reçois constamment ces erreurs maintenant !!! Comment avez-vous résolu? Jusqu'à présent, deux réponses ne sont pas utiles ...
Meltemi

Celui que tout le monde a suggéré, est un fichier en lecture seule. Comment puis-je le changer?
chhantyal le

Réponses:


143

Voici la façon dont je corrige l'erreur "Format de date non valide dans la spécification":

1.) Accédez au dossier des spécifications situé à l'adresse:

/usr/local/lib/ruby/gems/1.8/specifications/

2.) Trouvez la spécification à l'origine du problème.

3.) Changer s.date = %q{2011-05-21 00:00:00.000000000Z}pours.date = %q{2011-05-21}

C'est un GAGNANT pour moi! Bonne chance


A travaillé un régal, ça me faisait la tête!
David Archer

A travaillé pour moi! J'étais sous Windows XP avec Ruby 1.8 installé. Le em.websocket-0.3.2.gemspec me lançait cette erreur lorsque j'essayais d'utiliser 'livereload' ( livereload.com ).
programme247365

A travaillé pour moi aussi, sur Linux sur la chronique 1.6.4
Gepsens

Cela résout le problème pour un gemme, mais les gemmes installées suivantes pourraient provoquer à nouveau cette erreur.
MickaelFM

2
cela me rend fou ... Suis-je censé changer le gemspec de 50 gemmes tierces? pourquoi n'ont-ils pas mis à jour les gemspecs, un an s'est écoulé ..
oma

60

Voici la commande pour résoudre ce problème pour toutes vos gemmes:

perl -p -i -e 's/ 00:00:00.000000000Z//' ~/gems/specifications/*.gemspec

Il convertit s.date = %q{2011-05-21 00:00:00.000000000Z}à s.date = %q{2011-05-21}et devrait résoudre votre problème.


Belle astuce pour faire une sauvegarde rapide avant de faire ceci:git init . && git commit -am "backup
troyt

Pourquoi essayer de changer le format de la date, cela dit que je n'ai pas la permission de le faire. Que faire?
chhantyal le

@chhantyal Vous devez alors l'exécuter en tant que sudo. Merci beaucoup pour cela! M'a fait gagner beaucoup de temps.
Matt McClure

21

Veuillez noter le commentaire de Damian Nowak. Ces commandes peuvent gâcher vos rubygems!

Sur Ubuntu 11.10, ce qui suit a résolu cette erreur:

sudo gem install rubygems-update
sudo update_rubygems     

Les éléments suivants peuvent fonctionner sur certains systèmes mais pas sur Debian:

sudo gem update --system

Génial, fonctionne également avec la version finale d'oneiric. Mais cela semble nettoyer toutes les gemmes installées manuellement.
zehrer

1
Ne l'utilise pas. Cela a gâché mes rubygèmes. J'ai dû rm -rf beaucoup de choses et revenir aux rubygems originaux du repo. Soit installez rubygems totalement manuellement, soit utilisez un rubygems fourni par Ubuntu. Alternativement, vous pouvez rechercher des rubygems actuels dans PPA. (J'aimerais pouvoir annuler mon +1 qui a été créé il y a environ un mois)
Nowaker

1
@DamianNowak Désolé d'entendre ça. J'ai ajouté un avertissement à la réponse!
Mark le

14

Vous pouvez mettre à jour votre gem. Pour résoudre ce problème, vous pouvez modifier le gemspecfichier directement - à partir de

2011-04-21 00:00:00.000000000Z

à

YYYY-MM-DD

Ou améliorez également vos rails

sudo gem update rails

Cela résoudra le problème.


@Meltemi ce sera sous le specificationsrépertoire c'est mon specificationschemin de répertoire -/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
Sayuj

+1 pour la mise à jour des rails - il résout le problème, bien qu'il lance les mêmes avertissements au début, il s'installe correctement et le problème ne se produit plus.
Adam Davis

6

Ne spécifiez pas l'heure ... juste la date. 2011-04-21devrait bien fonctionner.


Gem :: Specification.new do | s | s.name = "myplugin" s.version = "1.0.0" s.platform = Gem :: Platform :: RUBY s.authors = ["..."] s.email = ["..."] s .homepage = "http: // ..." s.summary =% q {...} s.description =% q {...} s.rubyforge_project = "myplugin" s.files = git ls-files.split ("\ n ") s.test_files = git ls-files -- {test,spec,features}/*.split (" \ n ") s.require_paths = [" lib "] end
Zag zag ..

Merci pour votre réponse. Je suis d'accord avec vous, mais je n'ai utilisé aucune date ou date / heure dans le fichier myplugin.gemspec. Le Gem a été généré automatiquement par Bundler. Je pense que ce problème pourrait être dû à Bundler ou RVM ... C'est étrange.
Zag zag ..

4

Eu le même problème. Cela ressemble à un bug dans les rubygems. Voici le commit qui l'a corrigé: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

Vous devez mettre à jour rubygems et bundler avec les dernières versions. Si vous rencontrez toujours des problèmes après cela, vous devrez peut-être supprimer puis réinstaller tous les gemmes qui vous posent des problèmes.


Eh bien, sauf que Redmine utilise sa propre version 2.3.11 de Rails, Rails 2.3.11 échoue avec RubyGems> = 1.7.0, et le commit que vous mentionnez est daté du 19 mai 2011, qui est post-1.7.0 (1er avril, 2011). Je suppose que dans ce cas, vous devez modifier les fichiers de spécifications.
Olivier 'Ölbaum' Scherler

3

Ceci est plus un commentaire à la réponse de Ben Hall, mais je n'ai pas encore ce privilège il semble

Les mises à jour des gemmes ne semblent pas fonctionner, je pense qu'il ne peut même pas charger le gem à cause du mauvais format de date. changer manuellement les dates était trop frustrant pour aller un par un, donc un grep:

grep -i *.gemspec -e '.*s\.date.*=.*%q{\(....-..-..\) \(.*Z\)}

Et pour sed:

sed -i -e 's/\(.*\)s\.date.*=.*%q{\(....-..-..\) \(.*Z\)}/\1s.date = %q\{\2}/p' ./*.gemspec

Et à vos risques et périls !! Je suis toujours un débutant sed, mais cela a fonctionné pour moi;)


2

Sur mon serveur slicehost, le dossier des spécifications était situé à un endroit différent. Voici le chemin:

/usr/lib/ruby/gems/1.8/specifications

L'erreur fournie doit donner le chemin d'accès au dossier des spécifications.


2

L'approche du fusil de chasse: désinstallez toutes les gemmes et relancez le bundler.

  1. gem list --no-version | xargs gem uninstall -aIx
  2. rm -i `rvm gemdir`/specifications/*.gemspec
  3. gem update --system
  4. gem install bundler
  5. bundle install

Si vous utilisez un .rvmrcfichier, faites attention à exécuter la ligne 2 car gemdir peut produire une sortie supplémentaire.
Jared Beck

1

(Jusqu'à ce que le correctif de bogue entre dans une version stable de Rubygems) Je l'ai résolu en réinstallant la même version de tous les gemmes générant des avertissements en utilisant le commutateur --version de la commande gem.


1

Comme l'a dit Ben Hall, vous devez corriger le fichier gemspec qui peut changer d'un système à l'autre. Pour savoir quel fichier est voir quel fichier est dit dans le rapport d'erreur, par exemple:

Gemspec non valide dans [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: format de date non valide dans la spécification: "2011-12-28 00: 00: 00.000000000Z"

Dans cet exemple, vous devez modifier le fichier "/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec" et remplacer "2011-12-28 00: 00: 00.000000000Z" par "2011-12-28" en option à la date.


1

Avait ce problème encore maintenant. La mise à jour de Rubygems l'a bien résolu:

gem update --system

0

Voici mon environnement:

RubyGems Environment:
- RUBYGEMS VERSION: 1.8.10
- RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin11.1.0]
- INSTALLATION DIRECTORY: /Users/user/.rvm/gems/ruby-1.9.2-p290@app
- RUBY EXECUTABLE: /Users/user/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
- EXECUTABLE DIRECTORY: /Users/user/.rvm/gems/ruby-1.9.2-p290@app/bin
- RUBYGEMS PLATFORMS:
  - ruby
  - x86_64-darwin-11
- GEM PATHS:
   - /Users/user/.rvm/gems/ruby-1.9.2-p290@app
   - /Users/user/.rvm/gems/ruby-1.9.2-p290@global
- GEM CONFIGURATION:
   - :update_sources => true
   - :verbose => true
   - :benchmark => false
   - :backtrace => false
   - :bulk_threshold => 1000
- REMOTE SOURCES:
   - http://rubygems.org/

J'ai finalement réussi à trouver une cause / un moyen d'éviter ces erreurs sur mon système. Je viens de revenir à la version 1.0.2 des concombres et des rails de concombre. Utiliser les dernières versions faisait cela ...


0

Même si vous installez la dernière version d'un gem avec un format de date valide, assurez-vous de le faire par la gem cleanup GEMNAMEsuite, car vous vous gemplaindrez toujours des spécifications des anciennes bibliothèques.


0

La réinstallation de vos gemmes peut être la solution dans bon nombre de ces états de machine légèrement différents.

Dans mon cas:

cd /Library/Ruby/Gems/1.8/specifications &&
sudo rm -rf *

Dans mon cas, les autres solutions plus créatives ont échoué.

Mon problème se Invalid gemspecposait en essayant d'utiliser des cocoapodes. J'ai couru à gem install cocoapodsnouveau et tout était rose.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.