Dlaczego pakiet nie zainstaluje klejnotów JSON?

82

Podczas próby uruchomienia pojawia się następujący błąd cap production deploy.

DEBUG [dc362284]    Bundler::GemNotFound: Could not find json-1.8.1.gem for installation
DEBUG [dc362284]    An error occurred while installing json (1.8.1), and Bundler cannot continue.
DEBUG [dc362284]    Make sure that `gem install json -v '1.8.1'` succeeds before bundling.

Może być ważne, aby zauważyć, że to wdrożenie działało, ponieważ zaktualizowałem Ruby do wersji 2.1.0, aby usunąć błąd kodowania. Zaktualizowałem lokalnie, co działało dobrze. Uruchomiłem, rvm install 2.1.0a rvm use 2.1.0następnie zmieniłem .ruby-versionplik, aby odzwierciedlić to uaktualnienie Rubiego.

bundle installKomenda działa lokalnie, ale daje ten sam błąd powyżej kiedy ssh na serwerze docelowym i uruchomić to polecenie.

Jeśli biegnę gem list, widzę to na liście klejnotów.

...
jquery-rails (3.0.4)
json (1.8.1)
less (2.3.2)
...

Jeśli wypróbuję zalecane rozwiązanie gem install json -v '1.8.1'Lokalnie i na serwerze docelowym, otrzymam następujące dane wyjściowe:

Building native extensions.  This could take a while...
Successfully installed json-1.8.1
Parsing documentation for json-1.8.1
Done installing documentation for json after 0 seconds
1 gem installed

Wygląda na to, że klejnot jest zainstalowany, prawda? Dlaczego to się dzieje? Jak mogę to rozwiązać? Każda pomoc byłaby bardzo mile widziana.

Tomasz
źródło
Co bundle show jsonci daje?
user2503775
Dodaj gem json, '1.8.1'do Gemfile
user2503775
Mam już gem json, '1.8.1' w moim pliku gem, niestety
Thomas
bundle show json give /Users/ME/.rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/json-1.8.1
Thomas
6
Potrzebowałem sudo apt-get install ruby-devna moim Ubuntu.
e9t

Odpowiedzi:

74
$ bundle update json
$ bundle install
dnvtrn
źródło
2
Zrobiło to dla mnie w Rubim 2.4.0!
Windmill,
Działa również dla rbenv ruby ​​2.4.1 (debian / ubuntu)
Aleksey Deryagin
To zadziałało również dla mnie. Ruby 2.4.0 High Sierra. Dziękuję Ci!
Robert_T_Taylor
U mnie też działało pod Rubim w wersji 2.4.2p198. Dzięki.
fatihturan
Głosowałem za tą odpowiedzią, ponieważ zadziałała dla mnie, podczas gdy zaakceptowana odpowiedź nie. Podobnie jak @Robert_T_Taylor, uruchomiłem to na macOS High Sierra.
Scott Lawrence,
68

Więc po pół dnia na tym i prawie natychmiast po wysłaniu mojego pytania znalazłem odpowiedź. Bundler 1.5.0 ma błąd polegający na tym, że nie rozpoznaje domyślnych klejnotów, o których mowa tutaj

Rozwiązaniem była aktualizacja do bundlera 1.5.1 przy użyciu gem install bundler -v '= 1.5.1'

Tomasz
źródło
10
Miałem ten sam problem nawet po aktualizacji pakietu, wykonanie gem install json -v '1.8.1'po aktualizacji naprawiło komunikat o błędzie.
Jason Denney
5
gem install json -v '1.8.1'a następnie bundle packagezałatwił mi
sprawę
Uratował mi kilka przekleństw. Dzięki za to!
Sum
1
Czy pakiet nie powinien instalować tych klejnotów za Ciebie? Nie rozumiem, dlaczego musisz ręcznie instalować klejnoty. bundler.io/rationale.html Używam Bundler w wersji
1.7.11
2
Używam pakietu w wersji 1.14.6, a także otrzymuję ten błąd
Catfish
49

Uruchom to polecenie, a wszystko będzie dobrze

sudo apt-get install libgmp-dev
Jameel Grand
źródło
U mnie też zadziałało :) Dzięki!
Deepak Kumar Padhy
@Imran Musisz to umieścić na terminalu linuxowym. Myślę, że używasz systemu Windows?
Rcordoval
41

jeśli korzystasz z MacOS Sierra, a Twoja wersja Ruby to 2.4.0. Wersja Ruby nie jest kompatybilna z json 1.8.3.

Możesz spróbować dodać tę linię do swojego pliku Gemfile:

gem 'json', github: 'flori/json', branch: 'v1.8'

To działa dla mnie!

Sok007
źródło
Dziękuję, że zaoszczędziło mi to wielu frustracji!
Echelon
33

Aby rozwiązać ten problem, po prostu uruchom:

bundle update

Zaktualizuje wersję twojego pakietu. Następnie uruchomić:

bundle install

Twój problem zostanie rozwiązany. Rozwiązanie jest dobrze wyjaśnione tutaj .

Rohini Choudhary
źródło
1
+1 Naprawdę pomocny i wyciągnął mnie z gry. Po bundle updatetym instalacja działała świetnie. Dziękuję za czyste rozwiązanie.
twknab
3
bundle updatezaktualizuje wszystkie twoje klejnoty. gem update bundlerzaktualizuje pakiet.
eebbesen
20

Tutaj znalazłem rozwiązanie . Występuje problem z wersją json 1.8.1 i ruby ​​2.2.3, więc zainstaluj wersję json 1.8.3.

gem install json -v1.8.3
Ajeet Khan
źródło
1
To zadziałało fantastycznie dla mnie na OSX, Ubuntu na wielu złych wersjach klejnotu json. W jednym przypadku musiałem usunąć plik blokady i odbudować go od nowa: instalacja pakietu git rm Gemfile.lock
fuzzygroup
2
Działało dobrze, najpierw usuwam, Gemfile.locka następnie po prostu uruchamiam bundle installi to wszystko.
alexventuraio
12

Powinieneś spróbować

$ sudo gem install json -v '1.8.2'

w moim przypadku (Ubuntu 14.04) to nie działało bezpośrednio i musiałem to zrobić:

$ sudo apt-get install ruby-dev

a potem mogłem zainstalować klejnot i kontynuować. Miałem jeszcze jeden problem, który został rozwiązany przez:

$ sudo apt-get install libsqlite3-dev

Nadzieja pomaga.

Lucas
źródło
9

Jeśli zalecana odpowiedź nie pomogła, ponieważ używasz już nowszej wersji pakietu. Wypróbuj rozwiązanie, które zadziałało dla mnie.

Usuń wszystko z folderu dostawcy. Dodaj linię do swojego gemfile

gem 'json', '1.8.0'

Następnie uruchom - bundle update json.

Wydaje się, że jest to problem z wersją 1.8.1, więc powrót do wersji 1.8.0 załatwił sprawę.

Adam
źródło
Działał podczas aktualizacji z Ruby 2.0.0 do 2.2.4.
Loubot
1
Nie ma potrzeby usuwania wszystkiego. „Pakiet json z aktualizacją pakietu” wystarczył.
Joffrey Baratheon
1
U gem 'json', '1.8.6'mnie zadziałało. Może zechcesz tego spróbować.
etagwerker
7

Napotkałem ten błąd podczas próby uruchomienia projektu na moim lokalnym dev boxie (OSX 10.6), używając Sinatra i Postgresql (przez activerecord), działając na rvm'd ruby ​​2.1. Znalazłem swoją odpowiedź tutaj: https://github.com/wayneeseguin/rvm/issues/2511

Mój dokładny problem (po pierwszym bloku wpisów w logu):

Otrzymuję również błąd podczas próby tworzenia natywnych rozszerzeń dla klejnotów

odpowiedź :

rvm reinstaluj 2.1.0 --disable-binary

Wyjaśnienie :

OSX nie ma menedżera pakietów, więc wszystkie biblioteki muszą być instalowane ręcznie przez użytkownika, co praktycznie uniemożliwia dynamiczne łączenie pliku binarnego, a jak widać, występują problemy z (pseudo) statycznie połączonym plikiem binarnym.

Ze względu na kompletność, najpierw zapomniałem zaktualizować rvm ( rvm get head), co spowodowało kilka innych błędów, ale --disable-binarypo wykonaniu tej czynności nadal potrzebowałem flagi.

Matthias
źródło
W rozwiązaniu pojawi się następujący błąd: „Wersja '2.1.0' jest niejednoznaczna. Nie można wybrać implementacji / wersji Rubiego, proszę podać bardziej szczegółowe informacje. Nie można ponownie zainstalować nieznanego pakietu ''”
holyredbeard
Być może nie masz Ruby 2.1.0 lub więcej niż jednej wersji zainstalowanej przez rvm. Uruchom rvm list, a zobaczysz, jaka jest twoja aktualna wersja. Użyj pełnego łańcucha (np. Ruby-2.0.0-p451) zamiast 2.1.0wspomnianego powyżej.
Matthias
6

bundle update json. Pomógł się przedostać.

anty-k
źródło
1
Pomyślnie zainstalowano json 1.8.6 (poprzednio 1.8.3)
Simon Liu
5

Kiedy próbowałem zainstalować gem json używając gem install jsonoddzielone od tylko przy użyciu bundle installmam ERROR: Failed to build gem native extension., patrząc w górę, że znalazłem za pomocą

    apt-get install ruby-dev

załatwił sprawę

PetrolHead
źródło
niesamowite - uratowałeś mi dzień!
Unkas
3

W przypadku OS X upewnij się, że masz coreutils

$ brew install coreutils
$ bundle
Tim Kozak
źródło
1
Chociaż otrzymałem ostrzeżenie „Ostrzeżenie: coreutils 8.32 jest już zainstalowany i aktualny”, to załatwiło sprawę.
Paul Verschoor
2

Wygląda na to, że jest to błąd w programie Bundler, który nie rozpoznaje domyślnych klejnotów zainstalowanych wraz z ruby ​​2.x. Nadal miałem problem nawet z najnowszą wersją bundlera (1.5.3).

Jednym z rozwiązań jest po prostu usunięcie json-1.8.1.gemspec z domyślnego katalogu gemspec.

rm ~/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/specifications/default/json-1.8.1.gemspec

Po wykonaniu tej czynności bundler nie powinien mieć problemu ze zlokalizowaniem klejnotu. Zauważ, że używam chruby. Jeśli używasz innego menedżera ruby, będziesz musiał odpowiednio zaktualizować swoją ścieżkę.

jearlu
źródło
tak, łatwo jest rozwiązać problem z pakietem json. Dziękuję
hainguyen
2

Brakowało mi rozwiązania nagłówków C było pobranie go dla Xcode, to najlepszy sposób.

xcode-select --install

Mam nadzieję, że to pomoże.

Haris Krajina
źródło
2

Pakiet nie mógł zainstalować json -v '1.8.1', a usunięcie mojego pliku Gemfile.lock i ponowne uruchomienie pakietu rozwiązało ten problem.

davidmccoy
źródło
1

Zainstalowałem najnowszą wersję json:

gem install json

Następnie usunąłem wiersz json (1.8.1) z Gemfile.lock i zrobiłem

bundle install

A potem plik Gemfile.lock używa json (1.8.3) bez błędów

PerseP
źródło
1
Samo uruchomienie aktualizacji pakietu rozwiązało ten problem ... innymi słowy, używając nowszej kompilacji klejnotów JSON.
Francis Malloch,
0

Dla mnie niektóre z wymienionych wcześniej odpowiedzi były pomocne ze zrozumienia, ale nie rozwiązały mojego problemu.

Więc to właśnie zrobiłem, aby rozwiązać problem.

  • Zmodyfikowany plik gemfile.lock do aktualizacji json (2.0.2) ( wcześniej było to 1.8.3 )
  • Sprawdź zainstalowaną wersję pakietu Bundler ( Bundler -vpolecenie). Miałem zainstalowaną wersję 1.12.5
  • Zainstaluj pakiet w wersji 1.11.2 (używając gem install bundler -v '1.11.2' )
  • Następnie uruchom instalację pakietową
iHS
źródło
0

W przypadku macOS Sierra:

Napotkałem ten błąd, gdy użyłem bundler ( v1.15.3) w v4.2projekcie Rails ( ). Rozwiązaniem dla mnie jest gem uninstall bundler -v '1.15.3'i gem install bundler -v '1.14.6'.

Devin
źródło