La vue Rails ne sera pas rendue derrière Passenger. Erreur: UTF-8 mal formé

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:

  • Passager (en essayant Nginx)
  • Base de données (parce que vous utilisez le même)
  • Rabl / Rails (probablement en supposant que le même code est déployé en production)

Cette erreur semble provenir du générateur JSON ruby, je vois:

  • Lien: Ce rapport d’erreur pour un outil jruby appelé LogStash
  • Lien: Cette erreur provenant d’un contexte Rails / JSON peut aider

et donc probablement statué dans

  • différence de système d’exploitation ou de configuration
  • ou des versions plus probables de logiciels

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.