Heroku перезаписывает файл database.yml и не включает никаких настроек кодирования или коалиции. Таким образом, путем хакерства правильные настройки всегда объединяются до установления соединения с базой данных.

анавливаю новый экземпляр приложения Rails (2.3.5) на Heroku, используя Amazon RDS в качестве базы данных. Я хотел бы использовать UTF-8 для всего. Поскольку RDS не является UTF-8 по умолчанию, я настроил новую группу параметров и переключил базу данных, чтобы использовать ее, в основном дляэто, Кажется, сработало:

SHOW VARIABLES LIKE '%character%';

character_set_client        utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results      utf8
character_set_server        utf8
character_set_system        utf8
character_sets_dir       /rdsdbbin/mysql-5.1.50.R3/share/mysql/charsets/

Кроме того, я успешно настроил Heroku для использования базы данных RDS. После граблей db: migrate все выглядит хорошо:

CREATE TABLE `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `commentable_id` int(11) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `content` text COLLATE utf8_unicode_ci,
  `child_count` int(11) DEFAULT '0',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `commentable_id` (`commentable_id`),
  KEY `index_comments_on_community_id` (`community_id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

В разметку я включил:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Также я установил:

production:
  encoding: utf8
  collation: utf8_general_ci

... в файле database.yml, хотя я не очень уверен, что в этом случае что-либо делается для соблюдения любых из этих настроек, поскольку Heroku, похоже, выполняет свою собственную настройку при подключении к RDS.

Теперь я ввожу комментарий через форму в приложении: «Úbe® ƒåiL», но в базе данных у меня есть «Ãšbe® Æ’Ã ¥ iL»

Это выглядит хорошо, когда Rails загружает его обратно из базы данных и отображает на странице, поэтому, что бы он ни делал, он отменяет другой. Если я посмотрю на базу данных RDS в Sequel Pro, то все будет хорошо, если я установлю кодировку "UTF-8 Unicode via Latin 1". Похоже, что Latin-1 подкрадывается где-то там.

Все работает в разработке, при подключении к локальной базе данных MySQL.

Кто-то должен был сделать это раньше, верно? Что мне не хватает?

Ответы на вопрос(2)

Ваш ответ на вопрос