in Linux, MAC

介紹

在編寫 yaml 檔時,如果沒有使用任何的 IDE, 或是想 automation 作檢查,勢必需要在 CLI 可以檢查的方法。Yaml 檔發生錯誤是很擾人的,尤其是一個yaml 檔可能上百行,要找一個空白空錯沒有什麼好方法。最近就遇到因為前一版 commit 設定檔的人沒有檢查語法,設定檔裡面少了一個空白,結果造成 indent 就不對,接著程式沒寫好就直接停止執行的問題。但後來想想,應該要有一些方便的 tool 在編寫 yaml 檔結束後,作一些簡單的檢查,來減少浪費大家人力來追問題。

實作方法

  • 安裝 ruby
  • 安裝 awesome_print 的 gem 檔

    # sudo gem install awesome_print

  • 執行 ruby 指令

    $ ruby -e “require ‘yaml’; require ‘awesome_print’; y=YAML.load_file(‘/tmp/example.yaml’); ap y”

在 MAC 下只要安裝一個 gem 檔,然後用內建的 ruby 指令馬上就可以看出來了,而且畫面還非常的漂亮。

DEMO

我們以 wikipedia 上的 yaml 範例檔為例:


receipt: Oz-Ware Purchase Invoice
date: 2012-08-06
customer:
given: Dorothy
family: Gale

items:
– part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4

– part_no: E1628
descrip: High Heeled “Ruby” Slippers
size: 8
price: 100.27
quantity: 1

bill-to: &id001
street: |
123 Tornado Alley
Suite 16
city: East Centerville
state: FL

ship-to: *id001

specialDelivery: >
Follow the Yellow Brick
Road to the Emerald City.
Pay no attention to the
man behind the curtain.

Result:
如果一切順利的話,可以看到下面的結果,除了可以驗證內容打的對不對之外,還可以看結構是否正確。
yaml parse result

如果結構有錯,或是語法有錯,他會顯示錯誤的行數,這樣就比較好 Debug 了。
parse error

結論

如果有 vim 的 plugin or sublime 的 plugin 在即時編寫時,就可以直接列出語法有問題的地方應該會更好更直覺。不過現在這個方法比較適合在 CI commit build 預先作檢查,減少錯誤的程式上到 production 。

參考

[1] http://stackoverflow.com/questions/3971822/yaml-syntax-validator
[2] http://stackoverflow.com/questions/17289399/how-do-i-pretty-print-a-hash-to-a-rails-view
[3] https://github.com/michaeldv/awesome_print

Write a Comment

Comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料