Недействительный gemspec из-за формата даты в спецификации


89

Когда я включаю созданный мной самоцвет, благодаря Bundler (версия 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

Ответы:


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}

Для меня это ВЫИГРЫШ! Удачи


Получил удовольствие, это делало мне голову!
Дэвид Арчер,

Сработало у меня! Я был на Windows XP с установленным Ruby 1.8. Em.websocket-0.3.2.gemspec выдавал мне эту ошибку при попытке использовать livereload ( livereload.com ).
program247365

У меня тоже работал, на linux на хроническом 1.6.4
Gepsens

Это устраняет проблему для одного драгоценного камня, но после установки драгоценных камней может снова возникнуть эта ошибка.
MickaelFM,

2
это сводит меня с ума ... я должен изменить спецификацию 50 сторонних драгоценных камней? почему они не обновили спецификации драгоценных камней, прошел год ..
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
тройт

Зачем пытаться изменить формат даты, там написано, что у меня нет на это разрешения. Что делать?
chhantyal

@chhantyal Тогда вам нужно запустить его как sudo. Спасибо вам большое за это! Сэкономил мне так много времени.
Мэтт МакКлюр

21

Обратите внимание на комментарий Дамиана Новака. Эти команды могут испортить ваши рубиновые камни!

В Ubuntu 11.10 эта ошибка была решена следующим образом:

sudo gem install rubygems-update
sudo update_rubygems     

Следующее может работать в некоторых системах, но не в Debian:

sudo gem update --system

Отлично, также работает с финальной версией онейрика. Но это, похоже, убирает все установленные вручную драгоценные камни.
zehrer

1
НЕ используйте его. Это испортило мои рубиновые камни. Мне пришлось rm -rf много всего и вернуться к исходным rubygems из репо. Либо установите rubygems полностью вручную, либо используйте предоставленные rubygems от Ubuntu. Кроме того, вы можете поискать текущие рубиновые камни в PPA. (Хотел бы я отменить свой +1, сделанный около месяца назад)
Новакер

1
@DamianNowak Жаль это слышать. Я добавил к ответу предупреждение!
Марк

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

+1 за обновление рельсов - это решает проблему, хотя вначале выдает те же предупреждения, устанавливается правильно, и проблема больше не возникает.
Адам Дэвис

6

Не указывайте время ... только дату. 2011-04-21должно работать нормально.


Gem :: Specification.new do | 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
Заг заг ..

Спасибо за Ваш ответ. Я согласен с вами, но я не использовал дату или дату и время в файле myplugin.gemspec. Самоцвет был автоматически создан Bundler. Думаю, проблема может быть в Bundler или RVM ... Странно.
Заг заг ..

4

Была такая же проблема. Похоже на ошибку в rubygems. Вот фиксация, которая исправила это: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

Вам необходимо обновить rubygems и бандлер до последних версий. Если после этого у вас все еще возникают проблемы, возможно, вам придется удалить, а затем переустановить все драгоценные камни, которые вызывают проблемы.


Что ж, за исключением того, что Redmine использует свою собственную версию Rails 2.3.11, Rails 2.3.11 терпит неудачу с RubyGems> = 1.7.0, а коммит, который вы упомянули, датирован 19 мая 2011 года, то есть после версии 1.7.0 (1 апреля, 2011). Думаю, в этом случае вам нужно отредактировать файлы спецификации.
Olivier 'Ölbaum' Scherler,

3

Это больше комментарий к ответу бена холла, но у меня пока нет такой привилегии.

обновления драгоценного камня, похоже, не работали, я думаю, он даже не может загрузить драгоценный камень из-за неправильного формата даты. ручное изменение дат было слишком неприятным, чтобы идти по одной, поэтому 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

Подход дробовика: удалите все драгоценные камни и перезапустите сборщик.

  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 может произвести дополнительный вывод.
Джаред Бек

1

(Пока исправление ошибки не попадет в стабильный выпуск Rubygems) Я решил его, переустановив ту же версию всех гумов, генерирующих предупреждения, с помощью переключателя --version команды gem.


1

Как сказал Бен Холл, вы должны исправить файл gemspec, который может меняться от системы к системе. Чтобы узнать, что это за файл, посмотрите, какой файл указан в отчете об ошибке, например:

Недопустимый gemspec в [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: недопустимый формат даты в спецификации: "2011-12-28 00: 00: 00.000000000Z"

В этом примере вы должны отредактировать файл «/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec» и заменить «2011-12-28 00: 00: 00.000000000Z» на «2011-12-28». в с.дате вариант.


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

Даже если вы устанавливаете последнюю версию гема с допустимым форматом даты, обязательно сделайте это gem cleanup GEMNAMEпозже, поскольку gemвсе равно будут жаловаться на спецификации для более старых библиотек.


0

Переустановка драгоценных камней может быть решением во многих из этих немного разных состояний машины.

В моем случае:

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

В моем случае другие более креативные решения не увенчались успехом.

Моя проблема Invalid gemspecвозникала при попытке использовать коконады. Я gem install cocoapodsснова побежал, и все было радужно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.