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.

Zag zag ..
fuente
¡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

ben hall
fuente
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.

Philippe Creux
fuente
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
marca
fuente
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.

Sayuj
fuente
@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.

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

spd
fuente
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í;)

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

ben hall
fuente
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
Jared Beck
fuente
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.

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

PhoneixS
fuente
1

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

gem update --system
polarblau
fuente
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 ...

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

Daniel Tsadok
fuente
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.

james_womack
fuente