2016-09-19 3 views
0

Je vais avoir la question suivante:YAML - Escape guillemets

symfony Classic 2 projet, PHPUnit 5.1.7.

Dans un fichier de configuration YML J'ai quelque chose comme ceci:

mobile_detect: 
    service: 
     mobile_detector: mobile_detect.mobile_detector.default 
    twig_extension_class: "SunCat\MobileDetectBundle\Twig\Extension\MobileDetectExtension" 

je lance des tests sur ma machine locale (ubuntu) et tout fonctionne très bien.

Ensuite, je déploie du code (environnement aws) et j'essaie d'exécuter des tests. Tout échoue avec l'erreur:

"Unescaped character \M". 

Je vois que yaml guillemets doubles parser des chaînes si \ M est en effet un caractère indéfini. Ma question est ... Pourquoi travaille-t-il sur le fichier local?

De plus, le code fonctionne correctement lorsque j'essaie d'accéder normalement (via apache-browser). Pourquoi cela fonctionne aussi bien?

Je suppose que l'approche correcte serait de remplacer toutes les guillemets doubles par des guillemets simples, mais cela prendrait beaucoup de temps (ne peut pas remplacer toutes les raisons dans certains cas en les utilisant comme cela a pu être prévu). Y at-il un moyen de faire des tests sur la machine de tests pour interpréter yml comme ils le font sur les machines locales?

+0

comment déployez-vous le code sur l'environnement aws? Vérifiez si les paramètres d'encodage sur le processus de transfert peuvent être – Matteo

+1

C'était aussi ma première estimation, mais l'encodage est correct, j'ai aussi écrit le fichier manuellement sur le test env (le même problème est survenu). Je devine que c'est une chose de phpunit parce que le code fonctionne bien si des demandes normales sont faites. – zozo

+0

A propos du déploiement (j'ai oublié de le mentionner) J'utilise un haricot élastique pour le déploiement. Il crée essentiellement une image avec votre code, réécrit l'environnement à partir d'une image spécifique, puis copie l'image de code sur celui-ci. Après cela, il exécute composer et appelle certains scripts personnalisés (cela ne devrait pas affecter le problème actuel). – zozo

Répondre

0

Is there any way to make tests on the tests machine to interpret yml as they do on the local machines?

Vous demandez si vous pouvez reproduire le comportement incorrect du code sur votre machine locale ailleurs. En fonction d'un comportement incorrect est l'une des pires choses que vous pouvez faire; il a tendance à être corrigé par des mises à jour logicielles.

Comme vous le dites vous-même: La méthode correcte consiste à réparer les fichiers YAML non valides. Que ce soit en utilisant des guillemets simples ou en échappant aux barres obliques inverses avec une autre barre oblique inverse. Il n'y a pas de solution pour conserver les fichiers YAML en cours qui sont garantis pour fonctionner lorsque vous mettez à jour votre pile logicielle.

+0

Je suis désolé de signaler (pas downvoting). C'est un point de vue valable et je suis d'accord avec le principe. Reproduire un comportement incorrect est l'une des pires choses que vous puissiez faire, mais ce n'est pas toujours le cas. La question était de savoir pourquoi cela se passe. Cela ferait un très bon commentaire mais n'est pas une réponse à la question. – zozo