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.

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

 Lail06 янв. 2011 г., 04:33
Я хотел бы посмотреть, что произойдет, если я установлю init_connect в «SET NAMES utf8», но я не могу понять, как это сделать с помощью интерфейса командной строки RDS. Я запускаю сообщение об ошибке, потому что оно кажется удушающим, когда я устанавливаю значение с пробелами. Не уверен, как это сделать.

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

добавив следующее в блок Rails :: Initializer.run в environment.rb

class Rails::Configuration
  def database_configuration
    # Heroku overwrites the database.yml file without setting any encoding when deploying to outside server (like Amazon RDS)      
    require 'erb'
    YAML::load(ERB.new(IO.read(database_configuration_file)).result).each_value {|env| env.merge!({"encoding" => "utf8", "collation" => "utf8_general_ci"}) }
  end
end

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

Решение Вопроса

чения к БД. Отредактируйте дополнение RDS и добавьте?encoding=utf8&collation=utf8_general_ci

Работал хорошо для меня, без изменений в проекте.

например.:

  mysql://user:[email protected]/my-db?encoding=utf8&collation=utf8_general_ci

Ссылка:http://blog.arvidandersson.se/2011/09/27/setting-activerecord-connection-to-utf8-on-heroku

 Stan Sidel15 нояб. 2013 г., 06:17
Также стоит отметить, что в этом случае строка подключения должна быть заключена в кавычки. Например:heroku addons:add amazon_rds --url="mysql2://user:[email protected]/my-db?encoding=utf8&collation=utf8_general_ci"
 William Denniss27 мая 2012 г., 05:29
Примечание об этом, если вы используетеmysql2 драгоценный камень, то URL в моем ответе становитсяmysql2://etc…

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