gemspec 中的无效日期格式规范
Posted
技术标签:
【中文标题】gemspec 中的无效日期格式规范【英文标题】:Invalid date format specification in gemspec 【发布时间】:2011-11-09 13:45:40 【问题描述】:当我尝试在 Windows 中使用 gems 时出现以下错误,我还提到了 this *** post 并更新了 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 环境: - 红宝石版本: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 rubygems-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_rubygems
和gem 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”,它对我有用。
我拥有的所有遇到此问题的 rubygem 规格也有一行
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 并且仍然得到这个 尝试对导致这些警告的 gem 运行“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 zzz
或 gem 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子查询-与父级的子查询链接中的日期时间格式无效