2013-05-14 14 views
11

Ho visto il seguente problema menzionato in un'altra discussione pochi giorni fa tra altri problemi, ma la soluzione per questo problema (per me) non sembra essere indirizzata .Si sta utilizzando una versione vecchia o stdlib di json gem

Recentemente ho eseguito un test sul mio ambiente di Ruby 1.9.2-P290 e è stato presentato con il seguente errore quando mi sono imbattuto uno script di test:

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' 

Questo problema continuato quando ho creato un completamente nuovo Ruby 1.9 .3-p392 ambiente, in esecuzione su Windows XP (non chiedere). Ciò che mi confonde è che anche quando ho installato json 1.7.7 o 1.8.0 (l'elenco delle gemme è incollato sotto), ricevo comunque questo messaggio quando eseguo il test. Non sta davvero influenzando i risultati dei miei test, ma l'avvertimento è piuttosto fastidioso da vedere ogni volta.

A quale Gemfile è necessario aggiungere questa versione e dove si troverà?

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

parte: ho visto lo stesso comportamento in Ruby 1.9.3 -p392. Si noti inoltre che questo avviso viene visualizzato anche in ambienti in cui Bundler non è in uso, quindi il suggerimento di modificare Gemfile non è applicabile. – L2G

+1

il suggerimento riguardante il gemfile è ovviamente un altro sviluppatore di gemme che pensa che "sicuramente tutti usano bundler" –

+0

O "sicuramente tutti usano rvm" ... o "sicuramente tutti usano Linux" ... o "sicuramente tutti usano un terminale che capisce Codici di escape ANSI "... _Sigh._ – L2G

risposta

10

Il messaggio proviene dalla gemma multi_json e sembra che potrebbe essere un bug. I suggest keeping an eye on this GitHub ticket.

Se il messaggio è troppo angosciante, è possibile effettuare il downgrade di multi_json alla versione 1.6.1 per eliminarlo. (Almeno questo funziona per me.)

UPDATE:

Sembra a me come la radice del problema è che, mentre multi_json vuole limitare il suo uso dei json e json_pure gemme per versioni specifiche, l'autore di multi_json non sta utilizzando il metodo gem nel suo codice per attivare queste versioni. (Suona come lui pensa Bundler è l'unico modo per specificare le versioni di gemme, ma non lo è.)

Dal multi_json cercherà i oj e yajl-ruby gemme prima tenta json, utilizzando uno di questi può essere la migliore soluzione di tutti. Quindi è possibile installare l'ultimo multi_json e quindi installare oj o yajl-ruby insieme ad esso.

+1

In effetti, un post sul Gruppo Watir Google suggeriva di eseguire il downgrade di multi_json a 1.7.2; questo certamente ha funzionato per me. (http://groups.google.com/group/watir-general/browse_thread/thread/46ef4881fcd71e35) – GJHmf

+0

"(Sembra che pensi che Bundler sia l'unico modo per specificare le versioni delle gemme, ma non lo è.)" + 1 per quello ... Il suo suggerimento nel messaggio di errore relativo alla modifica di un gemfile è più una prova di quel tipo di pensiero. –

+0

@GJHmf se questo ha funzionato per te, perché non accettare la risposta? –

5

Prova questo:

gem update --system 
gem update 
+0

grazie per aver postato questo ha funzionato alla grande! –

0

provare a eseguire i test con il comando bundle exec. Ciò costringerà il tuo ambiente a utilizzare le gemme in Gemfile.lock.

1

Vai al tuo percorso di installazione di Ruby, per esempio, C:\Ruby192\lib\ruby\1.9.1\json

Aprire version.rb file e aggiornare il dettaglio versione come indicato sotto: VERSION = '1.7.7'