2012-11-07 22 views
6

Tôi gặp phải sự cố lạ khi đang sử dụng mô-đun ActiveRecord :: Store trong ứng dụng Ruby on Rails. Theo tôi hiểu, mô-đun này sử dụng phương pháp 'serialize' dưới mui xe để nó chỉ tuần tự hóa dữ liệu của bạn thành định dạng yaml với ruby ​​được tích hợp sẵn trong gem.Ruby - LoadError enc/trans/single_byte

Nó hoạt động OK hầu hết thời gian, nhưng đôi khi tôi nhận được 500 lỗi với thông báo sau:

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' 

Như bạn thấy, tôi sử dụng rbenv và ruby ​​1.9.3-p286. Hệ thống của tôi là Ubuntu 11.10. Tệp bắt buộc tồn tại ~/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/i686-linux/enc/trans/single_byte.so. Lỗi tương tự tôi gặp phải với ruby ​​1.9.3-p194. Và phần lạ nhất của vấn đề này là lỗi này xảy ra theo thời gian.

Vì vậy, có thể ai đó cũng gặp sự cố này và đã tìm thấy giải pháp? Hoặc nó có vẻ giống như một lỗi trong tâm trí và tôi nên nộp nó cho người bảo trì của nó?

Cảm ơn bạn đã giúp đỡ!

CHỈNH SỬA: vấn đề không liên quan trực tiếp đến đá quý tâm linh. Đó là vấn đề chung với thiết lập ruby ​​bất thường. Xem câu trả lời được chấp nhận bên dưới để biết chi tiết.

Trả lời

1

Điều này có xảy ra trong môi trường phát triển ấm cúng của bạn không? Nếu vậy, tôi sẽ xem xét chạy nó dưới pry-rescue 's Pry.rescue do … end khối và poking xung quanh trong khi ở đó.

Tôi nghi ngờ có sự khác biệt về dữ liệu. Có bất kỳ cố ý nào không liên quan đến cây này không? Bạn có thể săn nó xuống với một cái gì đó như thế này:

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

Như bạn chỉ ra dưới đây, việc cài đặt rbenv được chia sẻ với những người dùng khác, vì vậy hãy chắc chắn để thực hiện lại các điều khoản khi có sự thay đổi:

chmod a+r -R ~/.rbenv/ 

Hoặc có thể tạo một nhóm được chia sẻ, chẳng hạn như src, sau đó:

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

rking, cảm ơn lời khuyên của bạn! Bạn đã chỉ cho tôi đúng hướng. Nó được giải quyết. Vấn đề là tầm thường: Tôi sử dụng các ký tự không phải ASCII trong mã nguồn của mình vì vậy tôi phải bật chế độ unicode trong trình thông dịch ruby ​​(thông qua các chú thích ma thuật). Nhưng vì thiết lập bất thường (thư mục nhà nơi ruby ​​đã được cài đặt đóng cửa từ truy cập bởi người dùng khác) ruby ​​không thể sử dụng nội dung của nó để chuyển mã của tôi. Giải pháp: thư mục mở nơi ruby ​​được cài đặt cho ít nhất người dùng khởi chạy trình thông dịch ruby. rking, bạn có thể hoàn thành câu trả lời của bạn với thông tin này để tôi có thể chấp nhận nó như là một giải pháp cuối cùng? Tôi hi vọng nó giúp ích cho ai đó. – rgt600

Các vấn đề liên quan