Mon application Rails est connectée à la même firebase database MS SQL en production et en développement.
En développement (sur mon Mac), je suis capable de rendre la vue /clients/active.json (via rabl).
Cependant, en production (derrière Passenger / Apache), je reçois cette erreur:
Started GET "/clients/active.json" Processing by ClientsController#active as JSON Rendered clients/active.json.rabl (204.6ms) Completed 500 Internal Server Error in 206.3ms ActionView::Template::Error (source sequence is illegal/malformed utf-8): 1: collection @clients 2: extends 'clients/index' app/views/clients/active.json.rabl:1:in `_app_views_clients_active_json_rabl__626601527_78036080'
La firebase database est en lecture seule et hors de mon contrôle. Existe-t-il un moyen de rendre le JSON en production comme il fonctionne sur ma machine de développement?
modifier
Je suis passé à Nginx et je rencontre toujours la même erreur.
Vous avez exclu:
Cette erreur semble provenir du générateur JSON ruby, je vois:
et donc probablement statué dans
La première question la plus importante est la suivante: quelle version de ruby sur Mac vs serveur? Des changements significatifs ont été apportés à la manière dont les encodages de jeux de caractères ont été traités entre ruby 1.8 et 1.9.
Mais si le serveur est sur 1.8 et que Mac est sur 1.9+, alors c’est probablement la raison pour laquelle il y a une différence. Mise à jour vers 1.9 ou 2.0 et je parie que les systèmes se comporteront de la même manière.
Si les deux sont à 1.9.2 ou supérieur, alors je regarderais non seulement les versions de gem (qui devraient être les mêmes si vous déployez votre Gemfile.lock
) mais les bibliothèques qui ont été utilisées pour construire les gems. Voir ce rapport de bogue similaire suggérant des indicateurs de compilation . En fait, la même cause est probable si les deux sont au ruby 1.8.
Avec 1.9.2, vous pouvez utiliser force_encoding
qui est décrit ici de manière très détaillée par notre héros, Yehuda Katz .
Si cela ne fonctionne pas, vous pouvez avoir recours à la solution / solution de contournement trouvée pour une autre post-interruption de LogStash . Cela doit probablement être fait dans le contrôleur à moins que vous ne vouliez utiliser le chemin de singe (que je ne recommande pas :-). Plus de détails sur l’origine probable de cette erreur, JSON::GeneratorError
ici .
Mon argent est sur la version rbuy.
Bonne chance!!!
Vérifiez la langue de votre environnement système.
Il devrait probablement être LANG = en_US.UTF-8
Vous vérifiez cela en émettant “env” dans votre système
env |grep LANG
si ce n’est pas le cas, réglez-le.
export LANG=en_US.UTF-8
Alternativement, vous pouvez émettre cette commande “locale”
Voici ma sortie
LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
Les parameters d’environnement de votre application constituent un autre élément à prendre en compte.
Je m’assurerais qu’il n’y a pas de parameters dans config / production.rb qui remplacent les parameters par défaut du système.
Vous pouvez peut-être copier config / development.rb sur config / production.rb et redémarrer les serveurs pour ce faire. Sinon, regardez-le et assurez-vous qu’il n’y a rien de suspect dans production.b
Si rien ne fonctionne, cela pourrait être un bug? https://code.google.com/p/phusion-passenger/issues/detail?id=872
J’ai trouvé cette question en cherchant sur Google un problème similaire avec “malformé utf-8” et RABL
La solution consistait à remplacer le générateur JSON par défaut (recommandé dans le wiki github de rabl).
Un simple
#Gemfile gem 'oj'
résolu le problème pour moi.