Gemspec inválido devido ao formato de data na especificação

89

Quando incluo uma gema que fiz, graças ao Bundler (versão 1.0.12), em um Gemfile e tento empacotar ou rake assim:

$ rake

Recebi esta mensagem de erro:

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"

Estou no último Mac OS X (10.6.4), com:

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

e:

$ 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

Eu realmente não vejo como resolver esse problema. Obrigado por todas as idéias.

Zag zag ..
fonte
Estou recebendo esses erros constantemente agora !!! Como você corrigiu? Duas respostas até agora não foram úteis ...
Meltemi
Aquele que todos sugeriram, é um arquivo somente leitura. Como posso mudá-lo?
chhantyal

Respostas:

143

Aqui está a maneira de corrigir o erro "formato de data inválido na especificação":

1.) Vá para a pasta de especificações localizada em:

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

2.) Encontre a especificação que está causando o problema.

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

Isso é uma vitória para mim! Boa sorte

Ben Hall
fonte
Funcionou muito bem, isso estava fazendo minha cabeça entrar!
David Archer de
Funcionou para mim! Eu estava no Windows XP com Ruby 1.8 instalado. O em.websocket-0.3.2.gemspec estava lançando este erro para mim ao tentar usar 'livereload' ( livereload.com ).
programa247365 de
Funcionou para mim também, no linux em crônica 1.6.4
Gepsens
Ele corrige o problema de uma gema, mas seguir as gemas instaladas pode causar esse erro novamente.
MickaelFM
2
isso está me deixando louco ... devo mudar o gemspec de 50 gemas de terceiros? por que eles não atualizaram as gemspecs, um ano se passou ..
oma
60

Aqui está o comando para corrigir isso para todas as suas joias:

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

Ele converte s.date = %q{2011-05-21 00:00:00.000000000Z}para s.date = %q{2011-05-21}e deve resolver o seu problema.

Philippe Creux
fonte
Bom truque para fazer um backup rápido antes de fazer isso:git init . && git commit -am "backup
troyt
Por que tentar alterar o formato da data, diz que não tenho permissão para fazer isso. O que fazer?
chhantyal
@chhantyal Você precisa executá-lo como sudo então. Muito obrigado por isso! Me economizou muito tempo.
Matt McClure
21

Observe o comentário de Damian Nowak. Esses comandos possivelmente bagunçam seus rubis!

No Ubuntu 11.10, o seguinte resolveu este erro:

sudo gem install rubygems-update
sudo update_rubygems     

O seguinte pode funcionar em alguns sistemas, mas não no Debian:

sudo gem update --system
Marca
fonte
Ótimo, também funciona com a versão final do oneiric. Mas isso parece limpar todas as joias instaladas manualmente.
Zehrer
1
Não use isso. Isso bagunçou meus rubis. Tive que rm -rf um monte de coisas e reverter para os rubygems originais do repo. Instale rubygems totalmente manualmente ou use um rubygems fornecido pelo Ubuntu. Alternativamente, você pode procurar rubygems atuais no PPA. (Eu gostaria de poder desfazer meu +1 que foi feito há cerca de um mês)
Nowaker
1
@DamianNowak Lamento ouvir isso. Eu adicionei um aviso à resposta!
Marcos
14

Você pode atualizar seu gem. Para corrigir isso, você pode editar o gemspecarquivo diretamente - de

2011-04-21 00:00:00.000000000Z

para

YYYY-MM-DD

Ou atualize seus trilhos também

sudo gem update rails

Isso vai resolver o problema.

Sayuj
fonte
@Meltemi estará no specificationsdiretório este é o specificationscaminho do meu diretório -/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
Sayuj
+1 para atualizar trilhos - corrige o problema, embora emita os mesmos avisos no início, é instalado corretamente e o problema não ocorre mais.
Adam Davis
6

Não especifique a hora ... apenas a data. 2011-04-21deve funcionar bem.

qrush
fonte
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 ..
Obrigado pela sua resposta. Eu concordo com você, mas não usei nenhuma data ou data e hora no arquivo myplugin.gemspec. O Gem foi gerado automaticamente por Bundler. Acho que esse problema pode ser por causa do Bundler ou RVM ... É estranho.
Zag zag ..
4

Tive o mesmo problema. Parece um bug em rubygems. Aqui está o commit que corrigiu: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

Você precisa atualizar rubygems e bundler para as versões mais recentes. Se você ainda tiver problemas depois disso, pode ser necessário remover e reinstalar todas as gemas que estão causando problemas.

spd
fonte
Bem, exceto que Redmine usa sua própria versão 2.3.11 do Rails, Rails 2.3.11 falha com RubyGems> = 1.7.0, e o commit que você mencionou é datado de 19 de maio de 2011, que é pós-1.7.0 (1º de abril, 2011). Acho que, nesse caso, você precisa editar os arquivos de especificação.
Olivier 'Ölbaum' Scherler
3

Este é mais um comentário para a resposta de Ben Hall, mas eu não tenho esse privilégio ainda parece

As atualizações de gemas não parecem funcionar, estou pensando que nem consigo carregar a gema por causa do formato de data ruim. alterar manualmente as datas era muito frustrante para ir uma a uma, então um grep:

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

E para sed:

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

E por sua própria conta e risco !! Ainda sou um novato em sed, mas funcionou para mim;)

pdelanauze
fonte
2

No meu servidor slicehost, a pasta de especificações estava localizada em um local diferente. Aqui está o caminho:

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

O erro fornecido deve fornecer o caminho para a pasta de especificações.

Ben Hall
fonte
2

A abordagem shotgun: desinstale todas as gemas e execute novamente o 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
Jared Beck
fonte
Se você usar um .rvmrcarquivo, tome cuidado ao executar a linha 2 porque o gemdir pode produzir uma saída extra.
Jared Beck
1

(Até que a correção do bug chegue a uma versão estável do Rubygems) Eu resolvi isso reinstalando a mesma versão de quaisquer gemas geradoras de aviso usando a opção --version do comando gem.

Pistos
fonte
1

Como disse Ben Hall, você deve consertar o arquivo gemspec que pode mudar de sistema para sistema. Para saber qual arquivo é, veja qual arquivo é informado no relatório de erros, por exemplo:

Gemspec inválido em [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: formato de data inválido na especificação: "2011-12-28 00: 00: 00.000000000Z"

Neste exemplo, você deve editar o arquivo "/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec" e alterar "2011-12-28 00: 00: 00.000000000Z" para "2011-12-28" na opção s.date.

PhoneixS
fonte
1

Ainda tinha esse problema agora. Atualizar Rubygems resolveu bem:

gem update --system
polarblau
fonte
0

Este é o meu ambiente:

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 consegui encontrar uma causa / maneira de evitar esses erros no meu sistema. Acabei de voltar para o pepino e pepino-trilhos versão 1.0.2. Usar as versões mais recentes fazia isso ...

rchampourlier
fonte
0

Mesmo se você instalar a versão mais recente de uma gem com um formato de data válido, certifique-se de fazer isso gem cleanup GEMNAMEdepois, pois gemainda reclamará das especificações das bibliotecas mais antigas.

Daniel Tsadok
fonte
0

Reinstalar suas joias pode ser a solução em muitos desses estados de máquina ligeiramente diferentes.

No meu caso:

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

No meu caso, as outras soluções mais criativas falharam.

Meu problema estava começando Invalid gemspecao tentar usar cocoapods. Corri de gem install cocoapodsnovo e tudo estava rosado.

james_womack
fonte