gemspec中的日期格式规范无效

时间:2011-09-03 01:22:19

标签: ruby-on-rails rubygems

当我尝试在Windows中使用gem时,我收到以下错误,我也提到了 this stackoverflow post并更新了rubygems和rails。但没有什么能解决这个问题。

以下是完整的错误,

    D:\>gem env
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/tilt-1.3.3.gemspec]: invalid date format in specification: "2011-08-25 00:00:00
.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/execjs-1.2.4.gemspec]: invalid date format in specification: "2011-08-03 00:00:
00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/temple-0.3.3.gemspec]: invalid date format in specification: "2011-08-26 00:00:
00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/guard-0.6.3.gemspec]: invalid date format in specification: "2011-09-01 00:00:0
0.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/guard-livereload-0.3.1.gemspec]: invalid date format in specification: "2011-09
-01 00:00:00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/rack-cache-1.0.3.gemspec]: invalid date format in specification: "2011-08-27 00
:00:00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/tilt-1.3.3.gemspec]: invalid date format in specification: "2011-08-25 00:00:00
.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/execjs-1.2.4.gemspec]: invalid date format in specification: "2011-08-03 00:00:
00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/temple-0.3.3.gemspec]: invalid date format in specification: "2011-08-26 00:00:
00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/guard-0.6.3.gemspec]: invalid date format in specification: "2011-09-01 00:00:0
0.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/guard-livereload-0.3.1.gemspec]: invalid date format in specification: "2011-09
-01 00:00:00.000000000Z"
Invalid gemspec in [D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications
/rack-cache-1.0.3.gemspec]: invalid date format in specification: "2011-08-27 00
:00:00.000000000Z"
RubyGems Environment:
  - RUBYGEMS VERSION: 1.7.2
  - RUBY VERSION: 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]
  - INSTALLATION DIRECTORY: D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: D:/RailsInstaller/Ruby1.8.7/bin/ruby.exe
  - EXECUTABLE DIRECTORY: D:/RailsInstaller/Ruby1.8.7/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-mingw32
  - GEM PATHS:
     - D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8
     - C:/Documents and Settings/jeygokul/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

18 个答案:

答案 0 :(得分:132)

最终解决方案是:

在Ruby目录中搜索“spec”文件: * C:\ Ruby187 \ lib中\红宝石\宝石\ 1.8 \规格*

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

保存这些gemspec文件后,问题就解决了。

答案 1 :(得分:46)

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

答案 2 :(得分:45)

我已通过upgrading my RubyGems to 1.8.10

解决了此问题
gem update --system

编辑:您也可以尝试(根据ZeissS的建议)

gem install rubygems-update
update_rubygems

答案 3 :(得分:12)

除了运行gem update --system之外,我在每个报告为bad的项目gem env上使用了gem install <gem with bad gemspec>。这清理了我机器上的错误。

答案 4 :(得分:10)

迈克尔在评论中说:

gem pristine --all

答案 5 :(得分: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

之后一切顺利,祝你好运! :)

答案 6 :(得分: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)...(gedit chronic-0.6.4.gemspec)
步骤3.将s.date =%q {2011-10-13 00:00:00.000000000Z}更改为s.date =%q {2011-10-13}

干杯:)

答案 7 :(得分:2)

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

答案 8 :(得分:2)

我有太多的宝石要逐一修复,并尝试update_rubygemsgem pristine --all仍然没有运气。

所以我使用rvm clear gemset删除所有带有错误gemspec的宝石。 执行bundle install重新安装所有宝石,以及Viola!

答案 9 :(得分: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” 同样可以使用其他文件。

答案 10 :(得分:2)

升级到10.10后,我的ubuntu上遇到了同样的问题。以上都不适合我。我必须从http://rubygems.org/pages/download安装update_rubygems脚本并运行一次。一切都行之有效。

答案 11 :(得分: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 zzzgem pristine --all可能不会一直(永远?)出现在gem库中,而gem install xxx -v v.r.m可能会这样做。

无论如何,重新安装有问题的宝石版本对我有用,虽然这很乏味......

答案 12 :(得分:1)

通过运行gem update --system然后gem update解决问题。

答案 13 :(得分:1)

rvm gemset clear然后bundle install为我工作!

答案 14 :(得分:1)

“gem install ruby​​gems-update”,“update_rubygems”,然后“gem pristine --all”是在我之前列出的任何一个都没有工作之后为我解决问题的组合。

答案 15 :(得分:0)

这不是一个真正的答案,但如果有人想挖掘更多,我在这里找到了这个gemspec规范:http://rubygems.rubyforge.org/rubygems-update/Gem/Specification.html(向下滚动到日期= 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的代码,它看起来像显示错误的文件中的日期格式不符合这一点。

我所做的只是手动修复上面建议的违规gemspecs(将日期更改为“yyyy-mm-dd”,它对我有用。

我遇到过这个问题的所有rubygem规范都有一行

s.rubygems_version =%q {1.3.5}

所以我猜这些只是古老的宝石?那些%q {...}还有什么呢?

答案 16 :(得分:0)

就我而言,甚至没有安装引用的gem版本。我有那些宝石,但不是gemspecs导致错误的版本。所以,我刚刚删除了每个/path/to/specifications/offending-X.Y.ZZ.gemspec文件。

答案 17 :(得分:0)

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

$ sudo apt-get install ruby1.9.1

执行此操作后,您将无法获得日期错误。