2011-01-05 13 views
4

データベースとしてAmazon RDSを使用してHeroku上にRails(2.3.5)アプリケーションの新しいインスタンスを設定します。私はすべてのためにUTF-8を使用したいと思います。デフォルトではRDSはUTF-8ではないので、私は新しいパラメータグループを設定し、そのデータベースを使用するようにデータベースを切り替えました。基本的にはthisです。Heroku上のRailsを使用して新しいパラメータグループを設定していても、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データベースを使用することに成功しました。すくいデシベル後:移行、すべてがよさそうだ:マークアップで

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 

...この場合、HerokuはRDSに接続するときに独自の設定を行っているように見えるので、database.ymlでは、これらの設定のいずれかを守るために何かが行われているとは確信していません。

は今、私は、アプリ内のフォームを通じてコメントを入力します。「Úbe®ƒåiLを」が、データベースに、私はそれは時に正常に見える

「Úbe®Æ'Ã¥iLのを」持っていますRailsはそれをデータベースから読み込み、それをページにレンダリングします。したがって、どのような方法で行っても、それは逆に元に戻します。 Sequel ProのRDSデータベースを見ると、エンコーディングを "Latin 1経由でUTF-8 Unicode"に設定しても問題ありません。だから、Latin-1はどこかに忍び込んでいるようだ。

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

誰かが前にこれをしていたに違いないでしょうか?私は何が欠けていますか?

+0

私は「NAMESのUTF8を設定」するinit_connect設定した場合、何が起こるかどうかを確認したいのですが、私が行う方法を見つけ出すことはできませんRDSのコマンドラインインターフェイスを使用します。私はスペースで値を設定すると窒息しているように見えるのでエラーが返されます。どのようにそれを行うか分からない。 – Lail

答えて

5

もっと簡単な方法があります。 DB接続文字列でエンコーディングを指定することができます。 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

+2

'mysql2' gemを使用すると、私の答えのURLは' mysql2:// etc ... 'になります。 –

+0

この場合、接続文字列を引用符で囲む必要があります。例: 'heroku addons:amazon_rdsを追加する--url =" mysql2:// user:[email protected]。com/my-db?encoding = utf8&collat​​ion = utf8_general_ci "' –

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のファイルを上書きし、任意のエンコーディングや連立政権が含まれていません設定。このようにハックすることで、データベース接続が行われる前に正しい設定が常にマージされます。

関連する問題