gemspec中无效的日期格式规范


111

当我尝试在Windows中使用gems时,出现以下错误,我也提到了 这个stackoverflow帖子以及更新的rubygems和rails。但是没有任何办法可以解决问题。

以下是完整的错误,

    D:\>宝石环境
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/tilt-1.3.3.gemspec]:规范中的日期格式无效:“ 2011-08-25 00:00:00
.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/execjs-1.2.4.gemspec]:规范中无效的日期格式:“ 2011-08-03 00:00:
00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/temple-0.3.3.gemspec]:规范中的日期格式无效:“ 2011-08-26 00:00:
00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/guard-0.6.3.gemspec]:规范中的日期格式无效:“ 2011-09-01 00:00:0
0.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/guard-livereload-0.3.1.gemspec]:规范中的日期格式无效:“ 2011-09
-01 00:00:00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/rack-cache-1.0.3.gemspec]:规范中的日期格式无效:“ 2011-08-27 00
:00:00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/tilt-1.3.3.gemspec]:规范中的日期格式无效:“ 2011-08-25 00:00:00
.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/execjs-1.2.4.gemspec]:规范中无效的日期格式:“ 2011-08-03 00:00:
00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/temple-0.3.3.gemspec]:规范中的日期格式无效:“ 2011-08-26 00:00:
00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/guard-0.6.3.gemspec]:规范中的日期格式无效:“ 2011-09-01 00:00:0
0.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/guard-livereload-0.3.1.gemspec]:规范中的日期格式无效:“ 2011-09
-01 00:00:00.000000000Z“
[D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications中的gemspec无效
/rack-cache-1.0.3.gemspec]:规范中的日期格式无效:“ 2011-08-27 00
:00:00.000000000Z“
RubyGems环境:
  -RUBYGEMS版本:1.7.2
  -橄榄球版本:1.8.7(2011-06-30补丁程序级别352)[i386-mingw32]
  -安装目录:D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8
  -可执行的RUBY:D:/RailsInstaller/Ruby1.8.7/bin/ruby.exe
  -执行目录:D:/RailsInstaller/Ruby1.8.7/bin
  -RUBYGEMS平台:
    -红宝石
    -x86-mingw32
  -创业板路径:
     -D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8
     -C:/ Documents and Settings / jeygokul / .gem / ruby​​ / 1.8
  -宝石配置:
     -:update_sources =>是
     -:详细=> true
     -:基准=>否
     -:backtrace =>否
     -:批量阈值=> 1000
  -远程资源:
     -http://rubygems.org/

Answers:


45

我已经修复了这个问题升级我的RubyGems到1.8.10

gem update --system

编辑:您也可以尝试(如ZeissS建议)

gem install rubygems-update
update_rubygems

16
我有1.8.10,但仍然得到这个
DGM

3
尝试为引起这些警告的宝石运行“宝石原始的[宝石名称]”。
迈克尔

2
这对我也不起作用-因为“ gem update --system”命令引起了完全相同的问题,而“ gem pristine”却什么也没做。在重新运行gem更新之前,我必须遵循@Romain_Tribes的解决方案并手动删除gemspec文件
Taryn East

4
这在ubuntu上不是一个很好的选择,特别是对于休闲红宝石用户。
菲利普·惠兰

2
GaborKomaromi在下面的答案(或评论中的发现之一)起作用。这不是。
gotofritz

132

最终的解决方案是这样的:

在您的Ruby目录中搜索“ spec”文件:* C:\ Ruby187 \ lib \ ruby​​ \ gems \ 1.8 \ specifications *

如果gemspec文件包含以下内容:s.date =%q {2011-10-13 00:00:00.000000000Z }然后删除00:00:00.000000000Z部分:s.date =%q {2011-10- 13}

保存这些gemspec文件后,问题得以解决。


2
这对我有用(ruby 1.8.7 / win7),其他解决方案却没有
Felix Alcala

3
在ubuntu上像红宝石1.8.7和宝石1.7.2一样工作。谢谢!

9
这将从规范文件中删除该字符串:“ find。-type f | xargs perl -pi -e's / 00:00:00 \ .000000000Z //'”
Rainer Blessing

17
查找/var/lib/gems/1.8/specifications -name * .gemspec -type f | xargs perl -pi -e's /
00:00:00

4
sed -i 's/ 00:00:00.000000000Z//g' path_to_gemspecs
Pedro Rolo 2012年

46

这些解决方案都不适合我。为了解决这个问题,我删除了提到目录的所有内容(some / path / to / specification /),然后安装了所需的gem(实际上是Bundler,然后捆绑安装)。


这是简单,快速和有效的。尝试其他任何方法之前。
蒂姆·斯科里克

1
唯一适用于我的解决方案。但不确定这是否正确。
苏仁(Suren)2012年

这对我有用。它正在运行gem udpate --system,这使我遇到了这个问题!
戴夫·艾萨克斯

12

除了运行外,gem update --systemgem install <gem with bad gemspec>在每一个gem env项目上使用的报告都不好。这清除了我机器上的错误。


5
您可以使用“ gem pristine [gemname]”重新安装,也可以执行“ gem pristine --all”从缓存中重新安装gem,而无需重新下载它们。
迈克尔

10

正如迈克尔在评论中所说:

gem pristine --all

6

尝试在Ubuntu 11.10上安装GEM时遇到相同的问题。

Invalid gemspec in [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: invalid date format in specification: "2011-12-28 00:00:00.000000000Z"

以上选项对我不起作用。gem env报告了以下内容:

RubyGems Environment:
  - RUBYGEMS VERSION: 1.7.2
  - RUBY VERSION: 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]

所以我想这个问题是由于我需要安装较新版本的RubyGems而导致的。

发出gem update --system以下警告:

ERROR:  gem update --system is disabled on Debian, because it will overwrite the content of the rubygems Debian package, and might break your Debian system in subtle ways. The Debian-supported way to update rubygems is through apt-get, using Debian official repositories.
If you really know what you are doing, you can still update rubygems by setting the REALLY_GEM_UPDATE_SYSTEM environment variable, but please remember that this is completely unsupported by Debian.

但是我终于能够rubygems通过发出以下命令来更新到1.8.15:

sudo gem install rubygems-update && update_rubygems

此后一切正常,祝您好运!:)


对我而言,在Ubuntu上,需要sudo apt-get purge rubygems紧接着sudo apt-get install rubygems再安装所有gem。尴尬,但至少它起作用了:P(上面的内容对我不起作用)
Jeff Tratner

3

[/var/lib/gems/1.8/specifications/chronic-0.6.4.gemspec]中的gemspec无效:规范中的日期格式无效:“ 2011-09-09 00:00:00.000000000Z”

解决此类问题的简单方法是导航至文件。

步骤1. cd /var/lib/gems/1.8/specifications
步骤2.在您选择的编辑器中打开文件(chronic-0.6.4.gemspec)...(geditchron-0.6.4.gemspec),
步骤3。将s.date =%q {2011-10-13 00:00:00.000000000Z}更改为s.date =%q {2011-10-13}

干杯:)



2

我通过更改D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications/tilt-1.3.3.gemspec中的相应行,将s.date = Time.now而不是s.date =“ 2011-08-25 00:00:00.000000000Z”也可以使用其他文件。


2

我由一个已经太多宝石来修复一个,并同时尝试update_rubygemsgem pristine --all仍然没有运气。

因此,我rvm clear gemset经常使用错误的gemspec删除所有宝石。执行bundle install以重新安装所有gems和Viola!


Unrecognized command line argument: 'clear' ( see: 'rvm usage' )
乔纳森(Jonathan)2012年

1
rvm gemset empty your_gemset_name_or_global
taiansu 2012年

2
cd vendor/bundle/ruby/1.9.x/specifications
sed -i 's/ 00\:00\:00.000000000Z//g' *

1

gem update --system然后运行即可解决gem update


为我工作,我只是在执行gem更新--system后得到了这个错误,大多数在gem更新之后就消失了。对于其他人,我删除了gemspec文件。
mrbrdo '02

1

这些答案中指出的各种解决方案对我不起作用。起作用的是重新安装有问题的宝石的特定版本。在您的情况下,看起来像:

gem install tilt   -v 1.3.3
gem install execjs -v 1.2.4
gem install temple -v 0.3.3
gem install guard  -v 0.6.3
gem install guard-livereload -v 0.3.1
gem install rack-cache -v 1.0.3

我认为,gem pristine xxx yyy zzz或者gem pristine --all可能不会总是走出去(曾经?)到创业板上市资源库,而gem install xxx -v v.r.m做。

无论如何,重新安装那些令人讨厌的宝石版本对我来说是可行的,尽管这很麻烦。



1

“ gem install ruby​​gems-update”,“ update_rubygems”,然后是“ gem pristine --all”,这些组合在前面列出的一个都不起作用后为我解决了问题。


0

就我而言,所引用的gem版本甚至都没有安装。我有那些gems,但不是那些谁是gemspecs引起错误的版本。因此,我只删除了每个/path/to/specifications/offending-XYZZ.gemspec文件。


0

这并不是真正的答案,但是如果有人想挖掘更多,我可以在这里找到这个gemspec规范:http ://rubygems.rubyforge.org/rubygems-update/Gem/Specification.html (向下滚动到date = date()并单击显示源代码):

@date = case date
when String then
  if %r\A(\d{4})-(\d{2})-(\d{2})\Z/ =~ date then
    Time.utc($1.to_i, $2.to_i, $3.to_i)
  else
    raise(Gem::InvalidSpecificationException,
          "invalid date format in specification: #{date.inspect}")
  end
when Time, Date then
  Time.utc(date.year, date.month, date.day)
else
  TODAY
end

所以我想这是解析gemspec的代码,它看起来像显示错误的文件中的日期格式不符合此要求。

我所做的就是按照上面的建议手动修复那些有问题的gemspec(将日期更改为“ yyyy-mm-dd”,它对我有用。

我遇到的所有有此问题的rubygem规格也都有一行

s.rubygems_version =%q {1.3.5}

所以我猜这些只是古老的宝石?那些%q {...}到底是怎么回事?


0

如果您在Ubuntu 11.04上遇到此错误,我的解决方案是以下命令行:

$ sudo apt-get install ruby1.9.1

完成此操作后,您将不会收到日期错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.