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.