4

Amazon RDS をデータベースとして使用して、Heroku で Rails (2.3.5) アプリの新しいインスタンスをセットアップしています。すべてに UTF-8 を使用したいと思います。RDS はデフォルトで UTF-8 ではないため、新しいパラメーター グループを設定し、基本的に this に従って、そのパラメーター グループを使用するようにデータベースを切り替えまし。うまくいったようです:

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/

さらに、RDS データベースを使用するように Heroku を正常にセットアップしました。rake 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 では、RDS に接続するときに Heroku が独自の構成を行っているように見えるため、この場合、これらの設定を尊重するために何かが行われているとは確信していません。

今、アプリのフォームに「Úbe®ƒåiL」というコメントを入力しましたが、データベースには「Úbe®Æ'ã¥iL」があります

Rails がそれをデータベースからロードし直してページにレンダリングすると、問題ないように見えます。Sequel Pro で RDS データベースを見ると、エンコーディングを「UTF-8 Unicode via Latin 1」に設定すると問題ないようです。つまり、Latin-1 がどこかに忍び込んでいるようです。

ローカルの MySQL データベースに接続すると、開発中にすべてが機能します。

誰かが以前にこれを行ったに違いありませんよね?私は何が欠けていますか?

4

2 に答える 2

5

もっと簡単な方法があります。DB 接続文字列でエンコーディングを指定できます。RDS アドオンを編集し、追加します?encoding=utf8&collation=utf8_general_ci

私にとってはうまくいきました。プロジェクトに変更はありません。

例えば:

  mysql://user:pass@abc.rds.amazonaws.com/my-db?encoding=utf8&collation=utf8_general_ci

参照: http://blog.arvidandersson.se/2011/09/27/setting-activerecord-connection-to-utf8-on-heroku

于 2011-12-31T00:52:48.027 に答える
2

最終的に、environment.rbのRails::Initializer.runブロックに以下を追加することで問題を解決しました。

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ファイルを上書きし、エンコードや連立の設定は含まれません。このようにハッキングすることにより、データベース接続が確立される前に、常に正しい設定がマージされます。

于 2011-01-06T22:06:39.853 に答える