Nieprawidłowy gemspec z powodu formatu daty w specyfikacji


89

Kiedy dołączam klejnot, który stworzyłem, dzięki Bundlerowi (wersja 1.0.12), do pliku Gemfile, a następnie próbuję łączyć lub zgarniać w ten sposób:

$ rake

Otrzymałem ten komunikat o błędzie:

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"

Korzystam z ostatniego Mac OS X (10.6.4), z:

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

i:

$ 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

Naprawdę nie wiem, jak rozwiązać ten problem. Dzięki za wszelkie pomysły.


Ciągle otrzymuję te błędy !!! Jak to naprawiłeś? Dwie dotychczasowe odpowiedzi nie są pomocne ...
— Meltemi

Ten, który wszyscy sugerowali, jest plikiem tylko do odczytu. Jak mogę to zmienić?
— chhantyal

Odpowiedzi:


143

Oto sposób, w jaki naprawiam błąd „nieprawidłowy format daty w specyfikacji”:

1.) Przejdź do folderu specyfikacji znajdującego się pod adresem:

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

2.) Znajdź specyfikację, która powoduje problem.

3.) Zmień s.date = %q{2011-05-21 00:00:00.000000000Z}nas.date = %q{2011-05-21}

To dla mnie WYGRANA! Powodzenia


Zrobiłem przyjemność, to działało mi na głowę!
— David Archer,

Pracował dla mnie! Pracowałem na Windows XP z zainstalowanym Ruby 1.8. Em.websocket-0.3.2.gemspec zgłaszał mi ten błąd podczas próby użycia „livereload” ( livereload.com ).
— program247365

U mnie też
— działało

Naprawia problem dla jednego klejnotu, ale śledzenie zainstalowanych klejnotów może spowodować ponownie ten błąd.
— MickaelFM

2
doprowadza mnie to do szaleństwa ... czy mam zmienić specyfikację 50 klejnotów innych firm? dlaczego nie zaktualizowali gemspeców, minął rok ..
— oma

60

Oto polecenie naprawienia tego dla wszystkich twoich klejnotów:

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

Konwertuje s.date = %q{2011-05-21 00:00:00.000000000Z}na s.date = %q{2011-05-21}i powinien rozwiązać problem.


Niezła sztuczka, aby szybko wykonać kopię zapasową, zanim to zrobisz:git init . && git commit -am "backup
— troyt

Po co próbować zmienić format daty, mówi, że nie mam na to pozwolenia. Co robić?
— chhantyal

@chhantyal Musisz wtedy uruchomić go jako sudo. Bardzo dziękuję za to! Zaoszczędziło mi to dużo czasu.
— Matt McClure

21

Proszę zwrócić uwagę na komentarz Damiana Nowaka. Te polecenia mogą zepsuć twoje rubygemy!

W systemie Ubuntu 11.10 ten błąd rozwiązano:

sudo gem install rubygems-update
sudo update_rubygems     

Poniższe mogą działać na niektórych systemach, ale nie na Debianie:

sudo gem update --system

Świetnie, działa też z finalną wersją oniryczną. Ale wydaje się, że usuwa wszystkie ręcznie zainstalowane klejnoty.
— zehrer

1
Nie używaj tego. Zepsuło moje rubygemy. Musiałem rm -rf wiele rzeczy i wrócić do oryginalnych rubygemów z repozytorium. Zainstaluj rubygems całkowicie ręcznie lub użyj dostarczonych rubygemów przez Ubuntu. Alternatywnie możesz poszukać aktualnych rubygemów w PPA. (Żałuję, że nie mogę cofnąć mojego +1, które zostało zrobione około miesiąc temu)
— Nowaker

1
@DamianNowak Przykro mi to słyszeć. Dodałem ostrzeżenie do odpowiedzi!
— Mark

14

Możesz zaktualizować swój gem. Aby to naprawić, możesz edytować gemspecplik bezpośrednio - z

2011-04-21 00:00:00.000000000Z

do

YYYY-MM-DD

Lub zmodernizuj również swoje szyny

sudo gem update rails

To rozwiąże problem.


@Meltemi będzie w specificationskatalogu to jest moja specificationsścieżka do katalogu -/home/sayuj/.rvm/gems/ruby-1.9.2-p180/specifications/
— Sayuj

+1 do aktualizacji szyn - rozwiązuje problem, chociaż na początku wyświetla te same ostrzeżenia, instaluje się poprawnie i problem już nie występuje.
— Adam Davis

6

Nie podawaj czasu ... tylko datę. 2011-04-21powinno działać dobrze.


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
— Zag zag ..

Dzięki za odpowiedź. Zgadzam się z tobą, ale nie użyłem żadnej daty ani daty i godziny w pliku myplugin.gemspec. Klejnot został automatycznie wygenerowany przez Bundler. Myślę, że ten problem może być spowodowany przez Bundler lub RVM ... To dziwne.
— Zag zag ..

4

Miałem ten sam problem. Wygląda jak błąd w rubygemach. Oto zatwierdzenie, które to naprawiło: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7

Musisz zaktualizować rubygems i bundler do najnowszych wersji. Jeśli po tym nadal masz problemy, może być konieczne usunięcie, a następnie ponowne zainstalowanie wszystkich klejnotów, które powodują problemy.


Cóż, poza tym, że Redmine używa własnej wersji Railsów 2.3.11, Rails 2.3.11 zawodzi z RubyGems> = 1.7.0, a zatwierdzenie, o którym wspomniałeś, jest datowane na 19 maja 2011, czyli po wersji 1.7.0 (1 kwietnia, 2011). Zgadnij, w takim przypadku musisz edytować pliki specyfikacji.
— Olivier „Ölbaum” Scherler

3

To bardziej komentarz do odpowiedzi Ben hall'a, ale wydaje mi się, że nie mam tego przywileju

aktualizacje klejnotów wydawały się nie działać, myślę, że nie można nawet załadować klejnotu z powodu złego formatu daty. Ręczna zmiana dat była zbyt frustrująca, aby przejść jedną po drugiej, więc grep:

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

A dla seda:

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

I na własne ryzyko !! Wciąż jestem nowicjuszem seda, ale to zadziałało;)


2

Na moim serwerze Slicehost folder specyfikacji znajdował się w innym miejscu. Oto ścieżka:

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

Podany błąd powinien wskazywać ścieżkę do folderu specyfikacji.


2

Podejście ze strzelbą: Odinstaluj wszystkie klejnoty i uruchom ponownie pakiet.

  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

Jeśli używasz .rvmrcpliku, uważaj, uruchamiając linię 2, ponieważ gemdir może wygenerować dodatkowe wyniki.
— Jared Beck

1

(Dopóki poprawka nie trafi do stabilnej wersji Rubygems) Rozwiązałem to, ponownie instalując tę ​​samą wersję wszystkich klejnotów generujących ostrzeżenia za pomocą przełącznika --version polecenia gem.


1

Jak powiedział Ben Hall, musisz naprawić plik gemspec, który może się zmieniać w zależności od systemu. Aby dowiedzieć się, jaki plik jest, zobacz, który plik jest opisany w raporcie o błędach, na przykład:

Nieprawidłowy gemspec w [/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec]: nieprawidłowy format daty w specyfikacji: „2011-12-28 00: 00: 00.000000000Z”

W tym przykładzie musisz edytować plik „/var/lib/gems/1.8/specifications/svn2git-2.1.2.gemspec” i zmienić „2011-12-28 00: 00: 00.000000000Z” na „2011-12-28” w opcji s.date.


1

Miałem ten problem jeszcze teraz. Aktualizacja Rubygems rozwiązała to dobrze:

gem update --system

0

To jest moje środowisko:

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/

W końcu udało mi się znaleźć przyczynę / sposób, aby zapobiec tym błędom w moim systemie. Po prostu wracam do wersji ogórek i ogórek w wersji 1.0.2. Korzystanie z najnowszych wersji robiło to ...


0

Nawet jeśli zainstalujesz najnowszą wersję klejnotu z poprawnym formatem daty, pamiętaj, aby gem cleanup GEMNAMEpóźniej, ponieważ gemnadal będzie narzekać na specyfikacje starszych bibliotek.


0

Ponowna instalacja klejnotów może być rozwiązaniem w wielu z tych nieco różnych stanów maszyny.

W moim przypadku:

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

W moim przypadku inne, bardziej kreatywne rozwiązania zawiodły.

Mój problem Invalid gemspecpojawiał się, gdy próbowałem używać cocoapods. gem install cocoapodsZnowu pobiegłem i wszystko było różowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.