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