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