2012-01-28 24 views
8

Cho đến gần đây mọi thứ đều hoạt động tốt trên máy của tôi nhưng vì một vài ngày tôi vẫn gặp lỗi Encoding::UndefinedConversionError: U+2713 from UTF-8 to US-ASCII bất cứ khi nào tôi đăng nội dung nào đó từ trình duyệt lên máy chủ.Ruby 1.9.3 UndefinedConversionError

đầu tiên kể từ khi bài viết đã tham gia tôi đã cố gắng điều rõ ràng nhất với việc thêm mã hóa cho database.yml:

development: 
    adapter: postgresql 
    hostname: localhost 
    port: 5432 
    username: mikael 
    password: 
    database: dev 
    encoding: utf8 

Nếu tôi cài đặt ruby-debug19 và ruby-debug-base19 và đường ray chạy với:

rails s --environment=development --debug 

Bây giờ mọi thứ đều hoạt động tốt. Làm thế nào địa ngục tôi phải tìm ra nguyên nhân của vấn đề để tôi có thể sửa chữa nó?

EDIT 1:

1.9.3p0 :001 > Encoding.default_internal 
=> #<Encoding:UTF-8> 
1.9.3p0 :002 > Encoding.default_external 
=> #<Encoding:UTF-8> 

EDIT 2: Nếu tôi chạy trong chế độ sản xuất tất cả mọi thứ hoạt động tốt.

+0

'U + 2713' là dấu kiểm (' utf8 = ✓') mà đường ray sử dụng trong các phiên bản mới nhất để xác minh rằng bạn có thể làm việc với dữ liệu UTF-8. chắc chắn bạn không cập nhật bất cứ điều gì? – phoet

+0

Vui lòng chạy bảng điều khiển đường ray và kiểm tra 'Encoding.default_internal' và' Encoding.default_external'. – taro

+1

Lỗi đến từ đâu? Mã của bạn hoặc một nơi nào đó sâu bên trong Rails? –

Trả lời

1

này nghe có vẻ giống như một bug đã được báo cáo trong Rails 3.1.2 có workaround và phiên bản tiếp theo của 1.9.3 nên khắc phục vấn đề

+1

Thats nó và nó trông giống như đường ray 3.2 đã mang lại cùng một lỗi cũ đã được cố định trong 3.1.2 hoặc có thể nó là một đá quý gây ra nó. – mhenrixon

+0

Liên kết giải pháp không khả dụng, bạn có thể đăng lại không? – Rizon

14

Hãy thử thiết lập LC_ALLLANG biến trong shell của bạn. Thêm các dòng này vào ~/.profile, ~/.bash_profile, ~/.zprofile hoặc một nơi nào đó tương tự - tùy thuộc vào hệ thống của bạn.

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 

Bạn có thể nhận danh sách tất cả các ngôn ngữ bằng cách chạy locale -a. Cuối cùng bạn sẽ thấy một cái gì đó tương tự như khi bạn chạy locale trong một cửa sổ terminal mới:

LANG="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_CTYPE="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_ALL="en_US.UTF-8" 
+0

Còn hệ thống cửa sổ thì sao? – rony36

+0

@ rony36 Tôi đoán bạn nên xuất các biến này và cũng nên khắc phục các lỗi này trên cửa sổ. Có một cái nhìn ở đây về làm thế nào để làm điều đó http://superuser.com/a/284351/79208 – Lenart

+0

sửa chữa tuyệt vời, cảm ơn.Capybara 'puts page.html' đã ném một lỗi tương tự, và điều này làm việc. –

0

máy chủ ray của tôi đã ném lỗi này chính xác từ lớp logger của nó.

Bằng cách nâng cấp lên Rails mới nhất (3.2.13), nó đã biến mất. Tôi chỉ thay đổi Gemfile của tôi và đã thực hiện một cập nhật bó.

3

Tôi gặp sự cố này ngay hôm nay. LC_ALL của tôi trống nhưng mọi thứ khác đều đúng theo câu trả lời của Lenart. Thay đổi LC_ALL cũng không sửa nó cho tôi.

Giải pháp cho dự án của tôi là cập nhật rspec từ 2,14,6 lên 2,14,7.

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