2012-11-07 8 views
6

Napotkałem dziwny problem podczas korzystania z modułu ActiveRecord :: Store w mojej aplikacji Ruby on Rails. Jak rozumiem, ten moduł używa metody "serializacji" pod maską, więc po prostu serializuje dane do formatu yaml z wbudowanym psychiatrycznym ruby.Ruby - LoadError enc/trans/single_byte

To działa OK większość czasu, ale czasami mam błąd 500 z następującym komunikatem:

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' 

Jak widać, używam rbenv i Ruby 1.9.3-p286. Mój system to Ubuntu 11.10. Wymagany plik istnieje ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.so. Ten sam błąd, z którym spotkałem się z rubinem 1.9.3-p194. I najbardziej dziwną częścią tego problemu, że ten błąd występuje od czasu do czasu.

Więc może ktoś również napotkał ten problem i już znalazł rozwiązanie? Czy też wydaje się bardziej jak błąd w psychice i powinienem zgłosić to do jego opiekuna?

Z góry dziękuję za pomoc!

EDYCJA: problem nie jest bezpośrednio związany z klejnotem psychiki. To ogólny problem z nietypowym ustawieniem ruby. Aby uzyskać szczegółowe informacje, zapoznaj się z zaakceptowaną odpowiedzią poniżej.

Odpowiedz

1

Czy dzieje się to w zaciszu własnego środowiska programistycznego? Jeśli tak, to rozważam uruchomienie go pod blokiem Pry.rescue do … end i wyskakiwanie tam.

Podejrzewam różnicę danych. Czy w tym drzewie są celowo zaangażowane elementy spoza ASCII? Można polować go z czymś takim:

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

Jak wskazano poniżej, instalacja rbenv jest dzielona z innymi użytkownikami, więc należy przerobić uprawnienia po każdej zmianie:

chmod a+r -R ~/.rbenv/ 

Or może utworzyć wspólną grupę, taką jak src, a następnie:

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

rking, dziękuję za poradę! Wskazałeś mi właściwy kierunek. Jest rozwiązany. Problem był trywialny: używam znaków spoza ASCII w moim kodzie źródłowym, więc muszę włączyć tryb unicode w interpreterze ruby ​​(poprzez magiczne komentarze). Ale ze względu na nietypową konfigurację (katalog domowy, w którym Ruby został zainstalowany, a nie był dostępny dla innych użytkowników), Ruby nie mógł użyć swoich wewnętrznych rzeczy do transkodowania mojego kodu. Rozwiązanie: otwórz katalog, w którym zainstalowany jest rubin dla przynajmniej użytkownika, który uruchamia interpreter ruby. rking, czy możesz ukończyć swoją odpowiedź tymi informacjami, więc mogę zaakceptować to jako ostateczne rozwiązanie? Mam nadzieję, że to pomoże komuś. – rgt600

Powiązane problemy