2013-05-14 7 views
11

Ich habe das folgende Problem in einem anderen Thread vor einigen Tagen unter anderen Problemen erwähnt, aber die Lösung für dieses Problem (für mich) schien nicht angesprochen werden .Sie verwenden eine alte oder Stdlib-Version von JSON Gem

Ich lief vor kurzem einen Test auf meiner Ruby-1.9.2-p290-Umgebung und wurde mit dem folgenden Fehler dargestellt, wenn ich einen Testskript lief:

You are using an old or stdlib version of json gem 
Please upgrade to the recent version by adding this to your Gemfile: 

gem 'json', '~> 1.7.7' 

Dieses Problem fortgesetzt, wenn ich einen völlig neuen Rubin erstellt 1.9 .3-p392 Umgebung, läuft unter Windows XP (nicht fragen). Was mich verwirrt, ist, dass selbst wenn ich json 1.7.7 oder 1.8.0 installiert habe (die Liste wird unten eingefügt), bekomme ich immer noch diese Nachricht, wenn ich meinen Test starte. Es beeinflusst nicht wirklich meine Testergebnisse, aber die Warnung ist nur ziemlich nervig, jedes Mal zu sehen.

In welchem ​​Gemfile muss ich diese Version hinzufügen und wo würde sie sich befinden?

gem list: 
bigdecimal (1.1.0) 
childprocess (0.3.9) 
commonwatir (4.0.0) 
ffi (1.8.1 x86-mingw32) 
io-console (0.4.2, 0.3) 
json (1.8.0, 1.7.7, 1.5.5) 
mini_portile (0.5.0) 
minitest (5.0.0, 2.5.1) 
multi_json (1.7.3) 
rake (10.1.0.beta.3, 10.0.4, 0.9.2.2) 
rdoc (4.0.1, 3.9.5) 
rubygems-update (2.0.3) 
rubyzip (0.9.9) 
selenium-webdriver (2.32.1) 
watir-webdriver (0.6.4) 
websocket (1.0.7) 
win32-api (1.4.8 x86-mingw32) 
win32-process (0.7.2) 
windows-api (0.4.2) 
windows-pr (1.2.2) 
+0

Abgesehen: Ich habe das gleiche Verhalten in Ruby 1.9.3 gesehen -p392. Beachten Sie, dass diese Warnung auch in Umgebungen angezeigt wird, in denen Bundler nicht verwendet wird. Daher ist der Vorschlag zum Bearbeiten von Gemfile nicht anwendbar. – L2G

+1

der Vorschlag bezüglich der gemfile ist offensichtlich ein anderer Edelsteinentwickler, der denkt, dass 'sicherlich jeder Bundler verwendet' –

+0

Oder "sicher jeder benutzt rvm" ... oder "sicher jeder benutzt Linux" ... oder "sicher jeder benutzt ein Terminal, das versteht ANSI-Escape-Codes "... _Sigh._ – L2G

Antwort

10

Die Nachricht kommt aus dem multi_json Juwel, und es scheint, als könnte es ein Fehler sein. I suggest keeping an eye on this GitHub ticket.

Wenn die Nachricht zu peinlich ist, können Sie multi_json auf Version 1.6.1 herunterstufen, um es loszuwerden. (Zumindest das funktioniert für mich.)

UPDATE:

Es mir wie die Wurzel des Problems sieht ist, dass während multi_json will seine Nutzung der json und json_pure Edelsteine ​​auf bestimmte Versionen begrenzen, Der Autor von multi_json verwendet in seinem Code nicht die gem-Methode, um diese Versionen zu aktivieren. (Es klingt wie er denkt, Bündler ist der einzige Weg Versionen von Edelsteinen geben, es ist nicht.)

Seit multi_json wird die oj und yajl-ruby Edelsteine ​​versuchen, bevor es json versucht, einen von denen verwendet, kann die beste Abhilfe sein von allen. So können Sie einfach die neueste multi_json installieren und dann entweder oj oder yajl-ruby zusammen mit installieren.

+1

In der Tat schlug ein Beitrag in der Watir-Google-Gruppe vor, multi_json auf 1,7 herabzusetzen.2; Das hat sicherlich für mich funktioniert. (http://groups.google.com/group/watir-general/browse_thread/thread/46ef4881fcd71e35) – GJHmf

+0

"(Es klingt wie er denkt Bundler ist die einzige Möglichkeit, Versionen von Edelsteinen anzugeben; es ist nicht.)" + 1 für das .. Sein Vorschlag in der Fehlermeldung bezüglich der Änderung einer gemfile ist mehr Beweise für diese Art des Denkens. –

+0

@GJHmf Wenn dies für Sie funktioniert hat, warum nicht die Antwort akzeptieren? –

5

Try this:

gem update --system 
gem update 
+0

Danke für das Posten, das hat super funktioniert! –

0

Versuchen Sie Ihre Tests mit dem bundle exec Befehl ausgeführt wird. Dadurch wird Ihre Umgebung gezwungen, die Edelsteine ​​in Gemfile.lock zu verwenden.

1

Gehen Sie zu Ihrem Ruby-Installationspfad zum Beispiel C:\Ruby192\lib\ruby\1.9.1\json

öffnen version.rb Datei und aktualisieren Sie die Detail-Version als Gebrüll gezeigt: VERSION = '1.7.7'

Verwandte Themen