6

RubyonRailsアプリでActiveRecord::Storeモジュールを使用しているときに奇妙な問題が発生しました。私が理解しているように、このモジュールは内部で「serialize」メソッドを使用するため、データをruby組み込みのpsychgemを使用してyaml形式にシリアル化するだけです。

ほとんどの場合は問題なく動作しますが、次のメッセージで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とruby1.9.3-p286を使用しています。私のシステムはUbuntu11.10です。必要なファイルが存在し~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.soます。ruby1.9.3-p194で発生したのと同じエラー。そして、このエラーが時々発生するというこの問題の最も奇妙な部分。

では、誰かがこの問題に遭遇し、すでに解決策を見つけているのではないでしょうか。それとも、それは精神のバグのように見えますか?私はそれをそのメンテナに提出する必要がありますか?

助けてくれてありがとう!

編集:問題は直接サイケジェムに関連していません。これは、異常なルビーのセットアップに関する一般的な問題です。詳細については、以下の承認された回答を参照してください。

4

1 に答える 1

1

これは、開発環境の居心地の良い範囲内で起こっていますか?もしそうなら、私はそれをpry-rescuePry.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
于 2012-11-15T15:13:03.957 に答える