YAML — Escape \ в двойных кавычках

У меня следующая проблема:

Классический проект Symfony 2, phpunit 5.1.7.

В одном файле конфигурации yml у меня есть что-то вроде этого:

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

Я запускаю тесты на своей локальной машине (ubuntu), и все работает нормально.

Затем я развертываю код (среда aws) и пытаюсь запустить тесты. Все вылетает с ошибкой:

"Unescaped character \M".

Я вижу, что в yaml двойные кавычки анализируют строки, поэтому \M действительно является неопределенным символом. Мой вопрос... Почему это рабочий файл на локальном компьютере?

Кроме того, код отлично работает, когда я пытаюсь получить доступ в обычном режиме (через apache - вызов браузера). Почему это тоже хорошо работает?

Я предполагаю, что правильный подход состоял бы в том, чтобы заменить все двойные кавычки одинарными кавычками, но это потребовало бы очень много времени (невозможно заменить все, потому что в некоторых случаях их использование могло быть задумано). Есть ли способ сделать тесты на тестовой машине, чтобы интерпретировать yml так же, как на локальных машинах?


person zozo    schedule 19.09.2016    source источник
comment
как вы развертываете код в среде aws? Проверьте, могут ли быть настройки кодирования в процессе передачи   -  person Matteo    schedule 19.09.2016
comment
Это тоже было мое первое предположение, но с кодировкой все в порядке, я также написал файл вручную в тестовой среде (возникла та же проблема). Я предполагаю, что это phpunit, потому что код работает нормально, если выполняются обычные запросы.   -  person zozo    schedule 19.09.2016
comment
О развертывании (забыл упомянуть об этом) я использую эластичный beanstalk для развертывания. По сути, он создает образ с вашим кодом, переписывает окружение из определенного образа, а затем копирует на него образ кода. После этого он запускает композитор и вызывает некоторые пользовательские сценарии (это не должно влиять на текущую проблему).   -  person zozo    schedule 19.09.2016
comment
Хотя я мало знаю о программном обеспечении, которое вы используете, альтернативой использованию одинарных кавычек является использование двойных кавычек и использование двух обратных косых черт вместо обратных косых черт в вашем тексте.   -  person Burt_Harris    schedule 20.09.2016


Ответы (1)


Есть ли способ сделать тесты на тестовой машине, чтобы интерпретировать yml так же, как на локальных машинах?

Вы спрашиваете, можете ли вы воспроизвести неправильное поведение кода на вашем локальном компьютере в другом месте. Зависимость от неправильного поведения — одна из худших вещей, которые вы можете сделать; это, как правило, исправляется обновлениями программного обеспечения.

Как вы сами заявляете: правильный способ - исправить недействительные файлы YAML. Будь то использование одинарных кавычек или экранирование обратной косой черты другой обратной косой чертой. Не существует решения для сохранения текущих файлов YAML, которое гарантированно будет работать при обновлении программного стека.

person flyx    schedule 20.09.2016
comment
Извините, что указываю (не минусую). Это верная точка зрения, и я согласен с ней в принципе. Воспроизведение неправильного поведения — одна из худших вещей, которые вы можете сделать, но так бывает не всегда. Вопрос был в том, почему это происходит. Это был бы отличный комментарий, но это не ответ на реальный вопрос. - person zozo; 20.09.2016