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.

Zag zag ..
źródło
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

ben hall
źródło
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.

Philippe Creux
źródło
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
znak
źródło
Ś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.

Sayuj
źródło
@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.

qrush
źródło
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.

spd
źródło
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;)

pdelanauze
źródł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.

ben hall
źródło
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
Jared Beck
źródło
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.

Pistos
źródło
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.

PhoneixS
źródło
1

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

gem update --system
polarblau
źródło
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 ...

Romain Champourlier
źródło
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.

Daniel Tsadok
źródło
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.

james_womack
źródło