gemspec无效,因为规范中的日期格式


89

当我将自己制作的宝石包括在Bemler(1.0.12版)中后,放入Gemfile中,然后尝试像这样捆绑或倾斜:

$ rake

我收到此错误消息:

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"

我在最后一个Mac OS X(10.6.4)上,具有:

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

和:

$ 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

我真的不知道如何解决这个问题。感谢您的任何想法。


我现在不断收到这些错误!!!您如何解决?到目前为止,有两个答案没有帮助...
Meltemi

每个人都建议的那是只读文件。我该如何更改?
chhantyal 2012年

Answers:


143

这是我修复“规范中的无效日期格式”错误的方法:

1.)转到位于以下位置的规格文件夹:

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

2.)查找引起问题的规格。

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

对我来说是个胜利!祝好运


工作了请客,这真是令人着迷!
David Archer

为我工作!我在装有Ruby 1.8的Windows XP上。尝试使用'livereload'(livereload.com)时,em.websocket-0.3.2.gemspec为我抛出了此错误。
program247365

在长期版本1.6.4的Linux上也为我工作
Gepsens

它解决了一个宝石的问题,但随后安装的宝石可能会再次导致此错误。
MickaelFM 2011年

2
这让我发疯了...我应该改变50颗第三方宝石的宝石规格吗?为什么没有他们更新gemspecs,一年的时间过去了..
OMA

60

这是修复所有宝石的命令:

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

它转换 s.date = %q{2011-05-21 00:00:00.000000000Z}s.date = %q{2011-05-21}您,并且应该可以解决您的问题。


在执行此操作之前进行快速备份的好技巧:git init . && git commit -am "backup
troyt 2011年

为什么要尝试更改日期格式,它说我无权这样做。该怎么办?
chhantyal '02

@chhantyal然后您需要以sudo身份运行它。非常感谢你做的这些!节省了我太多时间。
马特·麦克卢尔

21

请注意Damian Nowak的评论。这些命令可能会弄乱您的rubygems!

在Ubuntu 11.10上,以下代码解决了该错误:

sudo gem install rubygems-update
sudo update_rubygems     

以下内容可能在某些系统上有效,但不能在基于Debian的系统上有效:

sudo gem update --system

太好了,还可以与oneiric的最终版本一起使用。但这似乎清除了所有手动安装的宝石。
zehrer 2011年

1
不要使用它。它弄乱了我的红宝石。我不得不rm -rf很多东西,并从回购中恢复到原始的rubygems。完全手动安装rubygems或使用Ubuntu提供的rubygems。或者,您可以在PPA中查找当前的红宝石。(我希望我可以撤消大约一个月前进行的+1)
Nowaker

1
@DamianNowak很抱歉听到这个消息。我在答案中添加了警告!
2012年

14

您可以升级自己的gem。要解决此问题,您可以gemspec直接编辑文件-从

2011-04-21 00:00:00.000000000Z

YYYY-MM-DD

或也升级您的导轨

sudo gem update rails

它将解决此问题。


@Meltemi,它将位于specifications目录下,这是我的specifications目录路径/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
Sayuj 2011年

+1用于更新rails-确实解决了该问题,尽管在开始时会发出相同的警告,它可以正确安装并且不再发生此问题。
亚当·戴维斯

6

不要指定时间,只指定日期。2011-04-21应该工作正常。


Gem :: Specification.new做| 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

感谢您的回答。我同意您的意见,但在myplugin.gemspec文件中未使用任何日期或日期时间。宝石由邦德勒自动生成。我认为这个问题可能是由于Bundler或RVM造成的。这很奇怪。
Zag zag..11年

4

有同样的问题。它看起来像是红宝石中的错误。这是修复它的提交:https : //github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

您需要将rubygems和bundler更新到最新版本。如果在那之后仍然有问题,则可能需要删除然后重新安装所有给您带来麻烦的宝石。


好吧,除了Redmine使用自己的2.3.11版本的Rails之外,Rails 2.3.11都会失败,并且RubyGems> = 1.7.0,并且您提到的提交日期是2011年5月19日,即1.7.0之后(4月1日, 2011)。猜测在这种情况下,您需要编辑规格文件。
Olivier'Ölbaum'Scherler 2011年

3

这更多是本·霍尔的回答,但我没有特权,但似乎

gem更新似乎无效,我认为由于日期格式错误,它甚至无法加载gem。手动更改日期太令人沮丧,无法一一进行,因此出现了grep:

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

对于sed:

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

风险自负!!我仍然是sed新手,但是对我有用;)


2

在我的slicehost服务器上,“规范”文件夹位于另一个位置。这是路径:

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

所提供的错误应提供到规格文件夹的路径。


2

弹枪方法:卸载所有gems,然后重新运行捆绑器。

  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

如果使用.rvmrc文件,请小心运行第2行,因为gemdir可能会产生额外的输出。
Jared Beck

1

(直到该错误修复进入Rubygems的稳定版本为止),我通过使用gem命令的--version开关重新安装了相同版本的任何可生成警告的gem来解决了该问题。


1

正如Ben Hall所说,您必须修复可能因系统而异的gemspec文件。要知道什么文件,请在错误报告中查看该文件,例如:

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

在此示例中,您必须编辑“ /var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec”文件,并将“ 2011-12-28”更改为“ 2011-12-28 00:00:00.000000000Z”在s.date选项中。


1

现在仍然有这个问题。更新Rubygems可以很好地解决此问题:

gem update --system

0

这是我的环境:

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/

我终于设法找到了防止这些错误的原因/方法。我只是恢复到了黄瓜和黄瓜护栏版本1.0.2。使用最新版本正在执行此操作...



0

在许多这些略有不同的机器状态下,重新安装宝石可能是解决方案。

就我而言:

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

就我而言,其他更具创造性的解决方案均失败了。

我的问题是Invalid gemspec在尝试使用可可豆时。我又跑gem install cocoapods了,一切都很顺利。

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.