Кодировка utf8 в Ruby on Rails

программирование ruby rails RoR utf8

Начал осваивать Ruby on Rails.
Установил. Работает.
В модель добавил строку:
validates_length_of :first_name, :within => 3..64, :too_long => 'long', :too_short => 'short'
Работает.
Исправил сообщения на русские:
validates_length_of :first_name, :within => 3..64, :too_long => 'Короткое', :too_short => 'Длинное'
Перестало. Выдает ошибку:
... app/models/user.rb:3: invalid multibyte char (US-ASCII) ...

Усердно гуглил. Попробовал использовать monkey patches: http://gist.github.com/273741
Не знаю, правильно ли я их использовал, конечно: создал три файла (patch.rb, fix_params.rb, fix_renderable.rb) в папке config/initializers - нигде не подключал их (полагаю, они вызываются автоматически).
Ошибка изменилась на:
... incompatible character encodings: ASCII-8BIT and UTF-8 ...
Причем ошибка из ruby уже, а не из rails:
D:/WebProgramming/Ruby19/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/core_ext/string/output_safety.rb:34:in `concat'
...

ruby 1.9.1
rails 2.3.5

Как заставить в итоге русские буквы работать?


Примечание:
Стоит Windows XP и хотелось бы настроить именно из под него
Редактор использую Aptana - там по умолчанию стоит использовать utf8
Ответы:
Линукс ставить. Или в редакторе использоавть вменяемую кодировку - utf8
пользую Aptana RadRails подобных трудностей не было
переустановите, перескачайте, переещечегонибудь сделайте с Aptana бывают такие заморочки
Кодировка в IDE ни причем!
В начало rb-скрипта нужно вставлять "магический комментарий"
# coding: utf-8
Сам недавно работаю с ruby ... Похоже баг(или особенность) интерпретатора - http://redmine.ruby-lang.org/issues/show/1238
ты должен сделать перекодировку из utf8 в cp866 при выводе в консоль Windows XP.
не знаю, как  в руби делается перекодировка:
но что-то типа такого должно быть:
Зря отминусовали человека с линуксом. Идея хорошая, только подана плохо. Ruby был рождён в POSIX-среде…и под виндой он работает формально, хотя и все тесты проходят. Вы можете просто не скомпайлить какой-либо гем и всё:) Попробуйте поставить себе виртуалку с линусом. Рубист не сможет дать фору хардкорному сисадмину, но из-за своей природной любопытности и прагматичности это весьма разбирающийся в юниксах вид программеров. Плюс вы избавете себя от неприятностей при переносе содной платформы на другую. Начните с Debian/Ubuntu.
на *nix - немного нативней
I18n - полезная вещь, и rails-way (:too_long => I18n.t( :dohera_bykv ) )
зачем нужно спаривать старичков (2.3.5) с малолетками (1.9.1)? ree уже не модно, а rails 2.3.5 еще рулит?
...лирика
Мне лично помогло добавление <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> в application.html.erb
Довольно неплохое объяснение причин - в блоге у Yehuda Katz (http://yehudakatz.com/2010/05/17/encodings-unabridged/)
Посмотрите внимательно (например, через консоль) на 1) кодировку данных, которые возвращает драйвер БД; 2) кодировку данных из формы браузера, которые в дальнейшем сохраняются в базу и 3) кодировку шаблонов и представлений (view) - для вашего случая сохраните все свои view в UTF-8 без BOM.
В дополнение к 1) драйвер mysql на сегодня возвращает данные в ASCII-8BIT (стандартная кодировка для двоичных данных). Поставьте ruby-mysql.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.