Warum installiert Bundler JSON Gem nicht?


82

Beim Versuch, es auszuführen, wird die folgende Fehlermeldung angezeigt 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.

Es kann wichtig sein zu beachten, dass diese Bereitstellung funktioniert hat, als ich auf Ruby 2.1.0 aktualisiert habe, um einen Codierungsfehler zu entfernen. Ich habe vor Ort ein Upgrade durchgeführt, was gut funktioniert hat. Ich habe meine Datei ausgeführt rvm install 2.1.0und rvm use 2.1.0dann geändert .ruby-version, um dieses Ruby-Upgrade widerzuspiegeln.

Der bundle installBefehl funktioniert lokal, erzeugt jedoch den gleichen obigen Fehler, wenn ich auf den Zielserver ssh und diesen Befehl ausführe.

Wenn ich renne, gem listkann ich das in der Liste der Edelsteine ​​sehen.

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

Wenn ich die empfohlene Lösung gem install json -v '1.8.1'lokal und auf dem Zielserver versuche, erhalte ich die folgende Ausgabe:

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

Es scheint also, dass der Edelstein installiert ist, oder? Warum passiert dies? Wie kann ich das lösen? Jede Hilfe wäre sehr dankbar.


Was bundle show jsongibt dir?
user2503775

In gem json, '1.8.1'zu Gemfile
user2503775

Ich habe Gem Json, '1.8.1' leider schon in meiner Gemfile
Thomas

Bundle Show Json geben /Users/ME/.rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/json-1.8.1
Thomas

6
Ich brauchte sudo apt-get install ruby-devauf meinem Ubuntu.
e9t

Antworten:


73
$ bundle update json
$ bundle install

2
Dies hat es für mich auf Ruby 2.4.0 getan!
Windmühle

Funktioniert auch für Rbenv Ruby 2.4.1 (Debian / Ubuntu)
Aleksey Deryagin

Das hat auch bei mir funktioniert. Ruby 2.4.0 High Sierra. Danke dir!
Robert_T_Taylor

Funktionierte auch für mich unter Ruby Version 2.4.2p198. Vielen Dank.
Fatihturan

Ich habe diese Antwort positiv bewertet, weil sie für mich funktioniert hat, während die akzeptierte Antwort dies nicht tat. Wie @Robert_T_Taylor habe ich dies auf macOS High Sierra ausgeführt.
Scott Lawrence

68

Nach einem halben Tag und fast unmittelbar nach dem Posten meiner Frage fand ich die Antwort. Bundler 1.5.0 hat einen Fehler, bei dem Standard-Edelsteine, auf die hier verwiesen wird, nicht erkannt werden

Die Lösung bestand darin, mit auf Bundler 1.5.1 zu aktualisieren gem install bundler -v '= 1.5.1'


10
Hatte das gleiche Problem auch nach dem Update des Bundlers, ein gem install json -v '1.8.1'Fehler nach dem Update behoben die Fehlermeldung für mich.
Jason Denney

5
gem install json -v '1.8.1'gefolgt von bundle packageden Trick für mich
Obie

Hat mir ein paar Schimpfwörter erspart. Danke dafür!
Wels

1
Soll Bundler diese Edelsteine ​​nicht für Sie installieren? Ich verstehe nicht, warum Sie die Edelsteine ​​manuell installieren müssen. bundler.io/rationale.html Ich verwende Bündler Version 1.7.11
Snowcrash

2
Ich verwende Bundler Version 1.14.6 und erhalte auch diesen Fehler
Catfish

48

Führen Sie diesen Befehl aus, dann ist alles in Ordnung

sudo apt-get install libgmp-dev

Hat auch für mich gearbeitet :) Danke!
Deepak Kumar Padhy

@ Imran Sie müssen dies auf ein Linux-Terminal setzen. Ich denke du machst Windows?
Rcordoval

40

Wenn Sie sich in MacOS Sierra befinden und Ihre Ruby-Version 2.4.0 ist. Die Ruby-Version ist nicht mit JSON 1.8.3 kompatibel.

Sie können versuchen, diese Zeile in Ihr Gemfile einzufügen:

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

Das funktioniert bei mir!


Danke, das hat mir viel Frust erspart!
Echelon

31

Um dieses Problem zu lösen, führen Sie einfach Folgendes aus:

bundle update

Die Version Ihres Bundlers wird aktualisiert. Dann renne:

bundle install

Ihr Problem wird gelöst. Lösung wird gut erklärt hier .


1
+1 Wirklich hilfreich und hat mich losgelassen. Danach bundle updatehat die Installation super funktioniert. Vielen Dank für die saubere Lösung.
Twknab

3
bundle updateaktualisiert alle Ihre Edelsteine. gem update bundlerwird Bundler aktualisieren.
eebbesen

20

Ich habe hier die Lösung gefunden . Es gibt ein Problem mit json Version 1.8.1 und Ruby 2.2.3. Installieren Sie daher die json 1.8.3 Version.

gem install json -v1.8.3

1
Dies funktionierte fantastisch für mich unter OSX, Ubuntu über mehrere schlechte Versionen des json gem. In einem Fall musste ich die Sperrdatei löschen und von Grund auf neu erstellen: git rm Gemfile.lock Bundle installieren
Fuzzygroup

2
Hat gut funktioniert, zuerst lösche ich das Gemfile.lockund laufe dann einfach bundle installund das wars.
Alexventuraio

12

Du solltest es versuchen

$ sudo gem install json -v '1.8.2'

In meinem Fall (Ubuntu 14.04) funktionierte das nicht direkt und ich musste dies tun:

$ sudo apt-get install ruby-dev

und dann könnte ich den Edelstein installieren und fortfahren. Hatte noch ein Problem, das behoben wurde durch:

$ sudo apt-get install libsqlite3-dev

Hoffen hilft.


8

Wenn die empfohlene Antwort nicht geholfen hat, weil Sie bereits eine neuere Version von Bundler verwenden. Probieren Sie die Lösung aus, die für mich funktioniert hat.

Löschen Sie alles in Ihrem Lieferantenordner. Fügen Sie Ihrer Gemfile eine Zeile hinzu

gem 'json', '1.8.0'

Dann laufen - bundle update json.

Es scheint ein Problem mit 1.8.1 zu sein, also hat es mir geholfen, auf 1.8.0 zurückzukehren.


Funktionierte beim Upgrade von Ruby 2.0.0 auf 2.2.4.
Loubot

1
Sie müssen nicht alles löschen. "bundle update json" genügte.
Joffrey Baratheon

1
Verwenden gem 'json', '1.8.6'hat bei mir funktioniert. Vielleicht möchten Sie das versuchen.
Etagwerker

7

Ich bin auf diesen Fehler gestoßen, als ich versucht habe, ein Projekt auf meiner lokalen Entwicklungsbox (OSX 10.6) mit Sinatra und Postgresql (über activerecord) auf einem rvm'd Ruby 2.1 auszuführen. Ich habe meine Antwort hier gefunden: https://github.com/wayneeseguin/rvm/issues/2511

Mein genaues Problem (nach dem ersten Block von Protokolleinträgen):

Ich erhalte auch eine Fehlermeldung, wenn ich versuche, native Erweiterungen für Edelsteine ​​zu erstellen

Die Antwort :

rvm neu installieren 2.1.0 --disable-binary

Die Erklärung :

OSX verfügt nicht über einen Paketmanager, daher müssen alle Bibliotheken manuell vom Benutzer installiert werden. Dies macht es praktisch unmöglich, die Binärdatei dynamisch zu verknüpfen, und wie Sie sehen, gibt es Probleme mit der (pseudo) statisch verknüpften Binärdatei.

Der Vollständigkeit halber hatte ich zunächst vergessen, rvm ( rvm get head) zu aktualisieren , was einige andere Fehler verursachte, aber das --disable-binaryFlag brauchte ich trotzdem, nachdem ich dies getan hatte.


Erhalten Sie den folgenden Fehler mit Ihrer Lösung: "Version '2.1.0' ist nicht eindeutig. Ruby-Implementierung / -Version kann nicht ausgewählt werden, bitte genauer sein. Unbekanntes Paket ''" kann nicht neu installiert werden
Holyredbeard

Möglicherweise ist Ruby 2.1.0 oder mehr als eine Version nicht über rvm installiert. Führen Sie aus rvm list, und Sie werden sehen, was Ihre aktuelle Version ist. Verwenden Sie die vollständige Zeichenfolge (z. B. ruby-2.0.0-p451) anstelle der 2.1.0oben genannten.
Matthias

5

bundle update json. Hat geholfen durchzukommen.


1
Erfolgreich installiert json 1.8.6 (war 1.8.3)
Simon Liu

5

Als ich versuchte, den json-Edelstein mit gem install jsongetrennt von nur mit zu installieren, bundle installbekam ich ERROR: Failed to build gem native extension.nach, dass ich mit gefunden habe

    apt-get install ruby-dev

hat den Trick gemacht


erstaunlich - du hast meinen Tag gerettet!
Unkas

3

Stellen Sie für OS X sicher, dass Sie Coreutils haben

$ brew install coreutils
$ bundle

2

Dies scheint ein Fehler in Bundler zu sein, der die zusammen mit Ruby 2.x installierten Standard-Edelsteine ​​nicht erkennt. Ich hatte das Problem auch mit der neuesten Version von Bundler (1.5.3).

Eine Lösung besteht darin, json-1.8.1.gemspec einfach aus dem Standardverzeichnis von gemspec zu löschen.

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

Danach sollte der Bündler kein Problem damit haben, den Edelstein zu finden. Beachten Sie, dass ich chruby verwende. Wenn Sie einen anderen Ruby-Manager verwenden, müssen Sie Ihren Pfad entsprechend aktualisieren.


Ja, es ist einfach, ein Problem mit dem JSON-Bundle zu lösen. Vielen Dank
Hainguyen

2

Mir fehlte die C-Header-Lösung, sie für Xcode herunterzuladen. Dies ist der beste Weg.

xcode-select --install

Ich hoffe es hilft.


2

Bundle konnte json -v '1.8.1' nicht installieren und das Löschen von Gemfile.lock und das erneute Ausführen von Bundle lösten dieses Problem für mich.


1

Ich habe die neueste Version von json installiert:

gem install json

Dann löschte die Zeile json (1.8.1) aus der Gemfile.lock und tat a

bundle install

Und dann verwendet die Datei Gemfile.lock json (1.8.3) ohne Fehler


1
Nur ein Bundle-Update auszuführen, löste dieses Problem für mich ... mit anderen Worten, mit einem neueren JSON-Gem-Build.
Francis Malloch


0

Für mich waren einige der zuvor erwähnten Antworten aus verständnisvoller Sicht hilfreich, aber diese haben mein Problem nicht gelöst.

Das habe ich getan, um das Problem zu lösen.

  • Gemfile.lock wurde geändert, um json (2.0.2) zu aktualisieren ( früher war es 1.8.3 )
  • Überprüfen Sie die installierte Bundler-Version ( Bundler -vBefehl). Ich hatte Version 1.12.5 installiert
  • Installieren Sie die Bundler-Version 1.11.2 (mit gem install bundler -v '1.11.2')
  • Führen Sie dann die Bundle-Installation aus

0

Für macOS Sierra:

Ich bin auf diesen Fehler gestoßen, als ich bundler ( v1.15.3) im Rails ( v4.2) -Projekt verwendet habe. Die Lösung für mich ist gem uninstall bundler -v '1.15.3'und gem install bundler -v '1.14.6'.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.