gemspec 中的无效日期格式规范

Posted

技术标签:

【中文标题】gemspec 中的无效日期格式规范【英文标题】:Invalid date format specification in gemspec 【发布时间】:2011-11-09 13:45:40 【问题描述】:

当我尝试在 Windows 中使用 gems 时出现以下错误,我还提到了 this *** post 并更新了 ruby​​gems 和 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 环境: - 红宝石版本: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 - 红宝石平台: - 红宝石 - x86-mingw32 - 宝石路径: -D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8 - C:/文档和设置/jeygokul/.gem/ruby/1.8 - 宝石配置: - :update_sources => 真 - :详细 => 真 - :基准 => 假 - :回溯 => 假 - :bulk_threshold => 1000 - 远程资源: - http://rubygems.org/

【问题讨论】:

【参考方案1】:
cd vendor/bundle/ruby/1.9.x/specifications
sed -i 's/ 00\:00\:00.000000000Z//g' *

【讨论】:

【参考方案2】:

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

$ sudo apt-get install ruby1.9.1

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

【讨论】:

【参考方案3】:

“gem install ruby​​gems-update”,“update_rubygems”,然后“gem pristine --all”是在前面列出的所有方法都不起作用之后为我解决问题的组合。

【讨论】:

【参考方案4】:

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

【讨论】:

您可以使用“gem pristine [gemname]”重新安装或执行“gem pristine --all”以从缓存中重新安装 gem 而无需重新下载。【参考方案5】:

尝试在 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(以上对我不起作用)【参考方案6】:

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

【讨论】:

【参考方案7】:

[/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)... (geditchronic-0.6.4.gemspec) 步骤 3. 将 s.date = %q2011-10-13 00:00:00.000000000Z 更改为 s.date = %q2011-10-13

干杯:)

【讨论】:

【参考方案8】:

我有太多宝石无法一一修复,尝试update_rubygemsgem pristine --all 仍然没有运气。

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

【讨论】:

Unrecognized command line argument: 'clear' ( see: 'rvm usage' ) rvm gemset empty your_gemset_name_or_global【参考方案9】:

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

@date = case date
when String then
  if %r\A(\d4)-(\d2)-(\d2)\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”,它对我有用。

我拥有的所有遇到此问题的 ruby​​gem 规格也有一行

s.rubygems_version = %q1.3.5

所以我猜这些只是旧宝石?那些 %q... 到底是怎么回事?

【讨论】:

【参考方案10】:

我已经通过upgrading my RubyGems to 1.8.10 解决了这个问题

gem update --system

编辑:您也可以尝试(按照 ZeissS 的建议)

gem install rubygems-update
update_rubygems

【讨论】:

我有 1.8.10 并且仍然得到这个 尝试对导致这些警告的 g​​em 运行“gem pristine [gemname]”。 这对我也不起作用——因为“gem update --system”命令导致了完全相同的问题,而“gem pristine”什么也没做。在重新运行 gem 更新之前,我必须遵循 @Romain_Tribes 的解决方案并手动删除 gemspec 文件 这在 ubuntu 上不是一个很好的选择,尤其是对于 ruby​​ 的休闲用户。 GaborKomaromi 在下面的回答(或 cmets 中的发现之一)有效。这个没有。【参考方案11】:

我已通过更改 D:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/specifications/tilt-1.3.3.gemspec 中的相应行来解决此问题“无效的日期格式规范” s.date =时间.现在 而不是 s.date = "2011-08-25 00:00:00.000000000Z" 同样可以使用其他文件。

【讨论】:

【参考方案12】:

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

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 会。

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

【讨论】:

【参考方案13】:

在我的例子中,甚至没有安装引用的 gem 版本。我有那些宝石,但不是宝石规格导致错误的版本。所以,我只是删除了每个 /path/to/specifications/offending-X.Y.ZZ.gemspec 文件。

【讨论】:

【参考方案14】:

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

【讨论】:

为我工作,我只是在执行 gem update --system 后得到了那个错误,他们中的大多数在 gem 更新后消失了。对于其他人,我删除了 gemspec 文件。【参考方案15】:

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

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

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

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

【讨论】:

这对我有用(ruby 1.8.7 / win7),其他解决方案没有 在 ubuntu 上使用 ruby​​ 1.8.7,gem 1.7.2 像魅力一样工作。谢谢! 这将从规范文件中删除字符串:“find . -type f | xargs perl -pi -e 's/00:00:00\.000000000Z//'” 找到 /var/lib/gems/1.8/specifications -name *.gemspec -type f | xargs perl -pi -e 's/ 00:00:00\.000000000Z//' 在 Ubuntu 中 sed -i 's/ 00:00:00.000000000Z//g' path_to_gemspecs【参考方案16】:

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

【讨论】:

【参考方案17】:

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

gem pristine --all

【讨论】:

【参考方案18】:

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

【讨论】:

这个简单、快速、有效。在其他任何人之前尝试这个。 唯一对我也有效的解决方案。但不确定这是否是正确的解决方法。 这对我有用。它运行 gem udpate --system 让我遇到了这个问题!

以上是关于gemspec 中的无效日期格式规范的主要内容,如果未能解决你的问题,请参考以下文章

即使日期格式支持 ISO 8601,IE11 中的日期也无效

用零存储日期(无效的日期时间格式)

MAX日期的Laravel子查询-与父级的子查询链接中的日期时间格式无效

如何使用 JavaScript 中的格式规范将字符串转换为日期时间?

日期时间格式无效:1292 日期时间值不正确 [重复]

laravel 中 d/m/y 格式的日期格式无效问题