Недійсний 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

Я справді не бачу, як вирішити це питання. Дякую за будь-які ідеї.


Зараз я постійно отримую ці помилки !!! Як ви виправили? Наразі дві відповіді не корисні ...
Мелтемі,

Той, який усі пропонували, - це файл лише для читання. Як я можу це змінити?
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
це зводить мене з розуму ... я повинен змінити gemspec 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
Тройт

Навіщо намагатися змінити формат дати, там написано, що я не маю на це дозволу. Що робити?
chhantyal

@chhantyal Тоді вам потрібно запустити його як sudo. Щиро дякую за це! Заощадив мені дуже багато часу.
Matt McClure

21

Зверніть увагу на коментар Даміана Новака. Ці команди, можливо, псують ваші рубіми!

У Ubuntu 11.10 цю помилку вирішено:

sudo gem install rubygems-update
sudo update_rubygems     

Наступне може працювати на деяких системах, але не на базі Debian:

sudo gem update --system

Чудово, також працює з остаточною версією oneiric. Але це, здається, очищає всі встановлені вручну дорогоцінні камені.
zehrer

1
НЕ використовуйте його. Це зіпсувало мої рубіми. Мені довелося rm -rf багато речей і повернутися до оригінальних рубімів з репо. Або встановіть рубіми повністю вручну, або використовуйте рубіми, надані Ubuntu. Крім того, ви можете шукати поточні рубіми у PPA. (Я хотів би скасувати свій +1, зроблений близько місяця тому)
Nowaker

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повинен працювати нормально.


Самоцвіт :: Specification.new do | s | s.name = "myplugin" s.version = "1.0.0" s.platform = Gem :: Платформа :: 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

Був той самий випуск. Це схоже на помилку в рубігемах. Ось коміт, який це виправив: 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). Думаю, у такому випадку вам потрібно відредагувати файли специфікацій.
Олів'є 'Ольбаум' Шерлер

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" в опції 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

Навіть якщо ви встановите останню версію дорогоцінного каменя з дійсним форматом дати, обов’язково 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.