2012-11-07 4 views
6

Ich habe ein seltsames Problem bei der Verwendung des ActiveRecord :: Store-Moduls in meiner Ruby on Rails-App festgestellt. Wie ich es verstehe, verwendet dieses Modul 'serialisieren' Methode unter der Haube, so dass es nur Ihre Daten in YAML-Format mit Ruby integrierten Psychedelstein zu serialisieren.Ruby - LoadError enc/trans/single_byte

Es funktioniert OK die meiste Zeit, aber manchmal bekomme ich 500-Fehler mit der folgenden Meldung:

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' 

Wie Sie sehen können, verwende ich rbenv und Rubin 1.9.3-P286. Mein System ist Ubuntu 11.10. Die erforderliche Datei existiert ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.so. Derselbe Fehler, den ich mit Ruby 1.9.3-p194 hatte. Und der seltsamste Teil dieses Problems, dass dieser Fehler von Zeit zu Zeit auftritt.

Vielleicht ist jemand auch auf dieses Problem gestoßen und hat bereits eine Lösung gefunden? Oder scheint es mehr wie ein Fehler in der Psychiatrie zu sein und ich sollte es seinem Betreuer übergeben?

Vielen Dank im Voraus für jede Hilfe!

BEARBEITEN: das Problem ist nicht direkt mit Psychedelstein verbunden. Es ist ein generelles Problem mit ungewöhnlichen Ruby-Einstellungen. Einzelheiten finden Sie in der untenstehenden Antwort.

Antwort

1

Ist dies innerhalb der gemütlichen Grenzen Ihrer Entwicklungsumgebung passiert? Wenn ja, würde ich es unter pry-rescue 's Pry.rescue do … end blockieren und stochern während dort.

Ich vermute einen Datenunterschied. Ist an diesem Baum absichtlich ein Nicht-ASCII beteiligt?

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

Wie Sie unten angegeben, die rbenv Installation mit anderen Nutzern geteilt, so sicher sein, die Berechtigungen auf jede Änderung wiederholen:

chmod a+r -R ~/.rbenv/ 

Oder man könnte es mit so etwas wie dies die Jagd nach vielleicht erstellen Sie eine geteilte Gruppe, z. B. src, dann:

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

rking, danke für Ihren Rat! Du hast mich in die richtige Richtung gezeigt. Es ist gelöst. Das Problem war trivial: Ich benutze Nicht-ASCII-Zeichen in meinem Quellcode, also muss ich den Unicode-Modus im Ruby-Interpreter einschalten (durch magische Kommentare). Aber wegen der ungewöhnlichen Konfiguration (Home-Verzeichnis, in dem Ruby installiert wurde und vor dem Zugriff durch andere Benutzer gesperrt war), konnte Ruby seine internen Dinge nicht benutzen, um meinen Code zu transcodieren. Lösung: Öffnen Sie das Verzeichnis, in dem Ruby mindestens für Benutzer installiert ist, die den Ruby-Interpreter starten. rking, könnten Sie Ihre Antwort mit dieser Info vervollständigen, damit ich sie als endgültige Lösung akzeptieren kann? Ich hoffe es hilft jemandem. – rgt600

Verwandte Themen