Ruby - LoadError enc/trans/single_byte

Я столкнулся со странной проблемой при использовании модуля ActiveRecord::Store в моем приложении Ruby on Rails. Как я понимаю, в этом модуле используется метод serialize, поэтому он просто сериализует ваши данные в формат yaml с помощью встроенного в Ruby модуля gem.

Большую часть времени он работает нормально, но иногда я получаю сообщение об ошибке 500 со следующим сообщением:

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'

Как видите, я использую rbenv и ruby ​​1.9.3-p286. Моя система - Ubuntu 11.10. Требуемый файл существует ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.so, С такой же ошибкой я столкнулся с ruby ​​1.9.3-p194. И самая странная часть этой проблемы в том, что эта ошибка возникает время от времени.

Так может кто-то тоже сталкивался с этой проблемой и уже нашел решение? Или это больше похоже на ошибку в психике, и я должен подать ее сопровождающему?

Заранее благодарю за любую помощь!

РЕДАКТИРОВАТЬ: проблема не имеет прямого отношения к психической драгоценности. Это общая проблема с необычной настройкой ruby. См. Принятый ответ ниже для деталей.

1 ответ

Решение

Это происходит в уютной среде вашей среды разработки? Если это так, я хотел бы рассмотреть его под pry-rescue"s Pry.rescue do … end блокировать и ковыряться там.

Я подозреваю разницу в данных. Есть ли не-ASCII, преднамеренно вовлеченные в это дерево? Вы могли бы выследить это с чем-то вроде этого:

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

Как вы указали ниже, установка rbenv предоставляется другим пользователям, поэтому обязательно измените разрешения при любых изменениях:

 chmod a+r -R ~/.rbenv/

Или, возможно, создать общую группу, такую ​​как src, затем:

 chgrp src ~/.rbenv && chmod g+r -R ~/.rbenv
Другие вопросы по тегам