2012-11-07 9 views
6

Ho riscontrato uno strano problema durante l'utilizzo del modulo ActiveRecord :: Store nell'app Ruby on Rails. Come ho capito, questo modulo usa il metodo 'serialize' sotto la cappa così da serializzare i dati in formato yaml con ruby ​​built-in psych gem.Ruby - LoadError enc/trans/single_byte

funziona bene la maggior parte del tempo, ma a volte ottengo 500 errore con il seguente messaggio:

LoadError (cannot load such file -- enc/trans/single_byte): 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:27:in `write' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:27:in `end_document' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:27:in `visit_Psych_Nodes_Document' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:20:in `block in visit_Psych_Nodes_Stream' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:20:in `each' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/emitter.rb:20:in `visit_Psych_Nodes_Stream' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych/nodes/node.rb:46:in `yaml' 
~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/psych.rb:243:in `dump' 

Come potete vedere, io uso rbenv e Ruby 1.9.3-P286. Il mio sistema è Ubuntu 11.10. Il file richiesto esiste ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.so. Lo stesso errore che ho riscontrato con Ruby 1.9.3-p194. E la parte più strana di questo problema che questo errore si verifica di volta in volta.

Quindi forse qualcuno ha riscontrato questo problema e ha già trovato una soluzione? O sembra più un bug in psicologia e dovrei presentarlo al suo manutentore?

Grazie in anticipo per qualsiasi aiuto!

EDIT: il problema non è legato direttamente alla gemma psichica. È un problema generale con una configurazione insolita di rubini. Vedere la risposta accettata sotto per i dettagli.

risposta

1

Sta succedendo all'interno degli accoglienti confini del vostro ambiente di sviluppo? In tal caso, prenderei in considerazione di eseguirlo sotto il blocco Pry.rescue do … endPry.rescue do … end e curiosare mentre ci sono.

Sospetto una differenza di dati. C'è qualche non ASCII intenzionalmente coinvolto in questo albero? Si potrebbe caccia giù con qualcosa di simile:

ruby -e 'Dir["**/*.yml"].each{|e| File.read(e)[/[^\x0-\x7f]/] and puts e}' 

Come indicato di seguito, l'installazione rbenv è condiviso con altri utenti, in modo da essere sicuri di rifare i permessi su ogni cambiamento:

chmod a+r -R ~/.rbenv/ 

Or forse creare un gruppo condiviso, ad esempio src, quindi:

chgrp src ~/.rbenv && chmod g+r -R ~/.rbenv 
+0

rking, grazie per il vostro consiglio! Mi hai indicato nella giusta direzione. È risolto. Il problema era banale: uso caratteri non ASCII nel mio codice sorgente, quindi devo attivare la modalità unicode nell'interprete ruby ​​(attraverso commenti magici). Ma a causa di un'insolita configurazione (directory home in cui Ruby è stato installato chiuso dall'accesso da parte di altri utenti), ruby ​​non poteva usare le sue cose interne per transcodificare il mio codice. Soluzione: aprire dir dove ruby ​​è installato per l'utente che avvia l'interprete Ruby. rking, potresti completare la risposta con queste informazioni in modo che io possa accettarla come soluzione finale? Spero che aiuti qualcuno. – rgt600

Problemi correlati