Недействительный 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.