2016-09-19 68 views
0

我遇到以下問題:YAML - Escape 雙引號

Classic symfony 2 project,phpunit 5.1.7。

在一個陽明配置文件,我有這樣的事情:

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,就像它們在本地機器上一樣?

+0

如何在aws環境中部署代碼?檢查是否可能是傳輸過程中的編碼設置 – Matteo

+1

這也是我的第一次猜測,但編碼很好,我也在測試env上手動編寫了文件(出現了相同的問題)。我猜是一個phpunit的東西,因爲如果有正常的請求,代碼運行正常。 – zozo

+0

關於部署(忘記提及它)我正在使用彈性beanstalk進行部署。它基本上是用你的代碼創建一個圖像,從特定的圖像重寫環境,然後複製代碼圖像。之後,它運行作曲家,並調用一些自定義腳本(這不應該影響當前問題)。 – zozo

回答

0

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

你問你是否可以複製的代碼不正確行爲在本地計算機上的其他地方。取決於不正確的行爲是你可以做的最糟糕的事情之一;它傾向於通過軟件更新得到修復。

正如你自己說的:正確的方法是修復你無效的YAML文件。通過使用單引號或通過用另一個反斜槓轉義反斜槓來實現。沒有解決方案來保持當前更新軟件堆棧時保證工作的YAML文件。

+0

我很抱歉地指出(不是downvoting)。這是一個有效的觀點,我原則上同意。重現不正確的行爲是你能做的最糟糕的事情之一 - 但並非總是如此。問題是爲什麼會發生這種情況。它會做出很好的評論,但不是對實際問題的回答。 – zozo