2017-08-31 7 views
0

Dans mon application Rails 4.2, je suis tombé sur un problème étrange. J'ai dû passer l'encodage mysql à utf8mb4 (pour permettre Emoji dans les messages). J'ai mis à jour MySql 5.7, modifié tabels etc. avec database.yml Updated:Mysql2 :: Erreur Impossible d'initialiser le jeu de caractères utf8mb4 (chemin:/usr/share/mysql/charsets /)

encoding: utf8mb4 
collation: utf8mb4_unicode_ci 

Tout a travaillé sur ma machine locale qui fonctionne sous Mac OS.

Sur le serveur de test, j'ai effectué les mêmes étapes et la même configuration. Mais si je mets la configuration

encoding: utf8mb4 

dans database.yml Je reçois

Mysql2::Error Can't initialize character set utf8mb4 (path: /usr/share/mysql/charsets/) 

MySQL supplémentaire pour mysql je l'ai fait dans my.cnf sur les deux machines:

innodb_file_format = Barracuda 
innodb_large_prefix 
innodb_file_per_table = 1 

init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8mb4' 
innodb_file_format_max = Barracuda 
innodb_strict_mode = 1 

character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 

I pouvez ajouter emoji sur le serveur de test, mais pas via l'application Rails. Sur les deux machines, je suis usign mysql2 version 0.3.21. Qu'est-ce qui peut causer ce problème?

PS. Même si je ne l'ai pas sur mon ordinateur local, j'ai ajouté utf8mb4 à Index.xml sur la machine de test, mais cela n'a pas aidé.

+0

Quelle est la version du serveur MySQL de votre serveur? Je pense que c'est ton problème. Je crois que utf8mb4 est supporté depuis 5.5, mais je ne suis pas sûr. –

+0

J'utilise MySQL 5.7.19. La base de données elle-même supporte uft8mb4 et je peux insérer des symboles (emoji) dans la base de données mais pas avec l'application Rails. – rolkos

+0

@rolkos - voir si cela aide: http://blog.arkency.com/2015/05/how-to-store-emoji-in-a-rails-app-with-a-mysql-database/ –

Répondre

0

Peut-être que cela va aider: RoR: application_controller.rb:

def configure_charsets 
    response.headers["Content-Type"] = "text/html; charset=UTF-8" 
    suppress(ActiveRecord::StatementInvalid) do 
     ActiveRecord::Base.connection.execute 'SET NAMES utf8mb4' 
    end 
    end 
+0

Malheureusement, il n'a pas travaillé. – rolkos

+0

@rolkos - voir si cela aide: http://blog.arkency.com/2015/05/how-to-store-emoji-in-a-rails-app-with-a-mysql-database/ Merci de me laisser savoir quelles mesures spécifiques vous prenez pour le résoudre. –

+0

J'ai vu cet article étapes décrites il est similaire à ce que j'ai fait. Ce qui me dérange, c'est que ça marche sur le serveur local mais pas sur le serveur de test avec CentOS. – rolkos