Gemspec no válido debido al formato de fecha en la especificación


89

Cuando incluyo una gema que hice, gracias a Bundler (versión 1.0.12), en un Gemfile y luego trato de empaquetar o rastrillar así:

$ rake

Tengo este mensaje de error:

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"

Estoy en el último Mac OS X (10.6.4), con:

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

y:

$ 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

Realmente no veo cómo resolver este problema. Gracias por cualquier idea.


¡Recibo estos errores constantemente ahora! ¿Cómo lo arreglaste? Dos respuestas hasta ahora no son útiles ...
Meltemi

El que todos sugirieron es un archivo de solo lectura. ¿Cómo puedo cambiarlo?
chhantyal

Respuestas:


143

Esta es la forma en que soluciono el error "formato de fecha no válido en la especificación":

1.) Vaya a la carpeta de especificaciones ubicada en:

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

2.) Encuentre la especificación que está causando el problema.

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

¡Eso es una GANANCIA para mí! Buena suerte


Funcionó de maravilla, ¡esto me estaba volviendo loco!
David Archer

¡Trabajó para mi! Estaba en Windows XP con Ruby 1.8 instalado. El em.websocket-0.3.2.gemspec me estaba lanzando este error al intentar usar 'livereload' ( livereload.com ).
program247365

También funcionó para mí, en Linux en la crónica 1.6.4
Gepsens

Soluciona el problema de una gema, pero las siguientes gemas instaladas podrían causar este error nuevamente.
MickaelFM

2
esto me está volviendo loco ... ¿se supone que debo cambiar la gemspec de 50 gemas de terceros? ¿Por qué no actualizaron las especificaciones técnicas, ha pasado un año?
oma

60

Aquí está el comando para arreglar esto para todas sus gemas:

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

Convierte s.date = %q{2011-05-21 00:00:00.000000000Z}a s.date = %q{2011-05-21}y debería solucionar el problema.


Buen truco para hacer una copia de seguridad rápida antes de hacer esto:git init . && git commit -am "backup
troyt

Por qué intentar cambiar el formato de fecha, dice que no tengo permiso para hacerlo. ¿Qué hacer?
chhantyal

@chhantyal Entonces debes ejecutarlo como sudo. muchas gracias por esto! Me ahorró mucho tiempo.
Matt McClure

21

Tenga en cuenta el comentario de Damian Nowak. ¡Estos comandos posiblemente estropeen tus rubygems!

En Ubuntu 11.10, lo siguiente resolvió este error:

sudo gem install rubygems-update
sudo update_rubygems     

Lo siguiente puede funcionar en algunos sistemas pero no en Debian:

sudo gem update --system

Genial, también funciona con la versión final de onírico. Pero esto parece limpiar todas las gemas instaladas manualmente.
zehrer

1
No lo uses. Echó a perder mis rubygems. Tuve que rm -rf un montón de cosas y volver a los rubygems originales del repositorio. Instale rubygems de forma totalmente manual o utilice un rubygems proporcionado por Ubuntu. Alternativamente, puede buscar rubygems actuales en PPA. (Ojalá pudiera deshacer mi +1 que se hizo hace aproximadamente un mes)
Nowaker

1
@DamianNowak Siento escuchar esto. ¡Agregué una advertencia a la respuesta!
Marcos

14

Puede actualizar su gem. Para solucionar este problema, puede editar el gemspecarchivo directamente, desde

2011-04-21 00:00:00.000000000Z

a

YYYY-MM-DD

O actualice sus rieles también

sudo gem update rails

Solucionará el problema.


@Meltemi estará en el specificationsdirectorio esta es mi specificationsruta de directorio -/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
Sayuj

+1 para actualizar rieles: soluciona el problema, aunque arroja las mismas advertencias al principio, se instala correctamente y el problema ya no ocurre.
Adam Davis

6

No especifique la hora ... solo la fecha. 2011-04-21debería funcionar bien.


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 ..

Gracias por tu respuesta. Estoy de acuerdo con usted, pero no utilicé ninguna fecha o fecha y hora en el archivo myplugin.gemspec. La gema fue generada automáticamente por Bundler. Creo que este problema podría deberse a Bundler o RVM ... Es extraño.
Zag zag ..

4

Tuve el mismo problema. Parece un error en rubygems. Aquí está el compromiso que lo solucionó: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

Necesita actualizar rubygems y bundler a las últimas versiones. Si aún tiene problemas después de eso, es posible que deba eliminar y luego reinstalar cualquier gema que le esté causando problemas.


Bueno, excepto que Redmine usa su propia versión 2.3.11 de Rails, Rails 2.3.11 falla con RubyGems> = 1.7.0, y la confirmación que mencionas tiene fecha del 19 de mayo de 2011, que es posterior a 1.7.0 (1 de abril, 2011). Supongo que en ese caso necesitas editar los archivos de especificaciones.
Olivier 'Ölbaum' Scherler

3

Esto es más un comentario a la respuesta de Ben Hall, pero parece que todavía no tengo ese privilegio.

Las actualizaciones de gemas no parecen funcionar, creo que ni siquiera pueden cargar la gema debido al formato de fecha incorrecto. cambiar manualmente las fechas era demasiado frustrante para ir una por una, por lo que un grep:

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

Y para sed:

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

¡¡Y bajo tu propio riesgo !! Todavía soy un novato en sed, pero funcionó para mí;)


2

En mi servidor Slicehost, la carpeta de especificaciones estaba ubicada en un lugar diferente. Aquí está el camino:

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

El error proporcionado debería dar la ruta a la carpeta de especificaciones.


2

El enfoque de la escopeta: desinstale todas las gemas y vuelva a ejecutar el paquete.

  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 usa un .rvmrcarchivo, tenga cuidado al ejecutar la línea 2 porque gemdir puede producir una salida adicional.
Jared Beck

1

(Hasta que la corrección de errores llegue a una versión estable de Rubygems) Lo resolví reinstalando la misma versión de cualquier gema generadora de advertencias usando el interruptor --version del comando gem.


1

Como dijo Ben Hall, debe reparar el archivo gemspec que puede cambiar de sistema a sistema. Para saber qué archivo es, vea qué archivo se indica en el informe de errores, por ejemplo:

Gemspec no válido en [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: formato de fecha no válido en la especificación: "2011-12-28 00: 00: 00.000000000Z"

En este ejemplo, debe editar el archivo "/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec" y cambiar "2011-12-28 00: 00: 00.000000000Z" por "2011-12-28" en la opción s.date.


1

Tenía este problema todavía ahora. Actualizar Rubygems lo resolvió bien:

gem update --system

0

Este es mi entorno:

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/

Finalmente logré encontrar una causa / una forma de evitar estos errores en mi sistema. Acabo de volver a la versión 1.0.2 de pepino y cucumber-rails. Usar las últimas versiones estaba haciendo esto ...


0

Incluso si instala la última versión de una gema con un formato de fecha válido, asegúrese de hacerlo gem cleanup GEMNAMEdespués, ya gemque todavía se quejará de las especificaciones de las bibliotecas más antiguas.


0

Reinstalar sus gemas puede ser la solución en muchos de estos estados de máquina ligeramente diferentes.

En mi caso:

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

En mi caso, las otras soluciones más creativas fallaron.

Mi problema fue Invalid gemspecal intentar usar cocoapods. Corrí de gem install cocoapodsnuevo y todo fue color de rosa.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.