用 gitlab-ci 自動測試 django 專案

隨著手上的 django 專案越來越大,就會遇到改了 A 功能以後 B 功能爛掉的情況。這時候測試的重要性就顯露出來了。

雖然 django 自己有 Unit Test 功能,但是要每個人在 commit 前都手動跑一次測試有點太勉強,總是可能會有忘記測試,結果 commit 爛掉的 code 上去的機會。所以把測試的工作丟給 gitlab-ci,讓每次 push 的時候 gitlab 都能自動跑 django 的 Unit test,並把測試結果吐到 Slack 上面會是比較方便的作法。

要使用 gitlab-ci 自動測試,需要完成以下步驟:

  • 編寫 django 的 Unit test
  • 安裝/註冊一台或多台 gitlab-ci-runner,用來執行測試
  • 編輯專案根目錄的 .gitlab-ci.yml 設定檔

編寫 django 的 Unit test

可參考 django 關於測試的文件

安裝/註冊 gitlab-ci-runner

  1. 先到 gitlab 專案頁面,點選右上角的齒輪圖示,選取「Runners」。會在這個頁面看到 gitlab 提供給 runner 註冊的 URL 以及 token
  2. 我用來跑 runner 的機器是 Ubuntu,可參考這份文件安裝 gitlab-ci-runner
  3. 裝好後執行 gitlab-ci-runner,會提示您輸入剛剛看到的 URL 和 token
  4. 然後根據您需要設定其他項目,在這邊我選用 docker 環境來執行測試。gitlab-ci 會在 runner 上跑一個 docker 環境,把您的 django 專案丟到這個環境內測試。所以也會需要在 runner 上安裝好 docker。

安裝/註冊成功後,會在 gitlab 的 Runners 頁面看到剛剛註冊的 runner:

2017-05-18 下午4.57.20
設定好的 gitlab-ci-runner 已註冊進 gitlab

編輯 .gitlab-ci.yml

再來編輯 .gitlab-ci.yml 設定檔,這個設定檔定義了 gitlab-ci 要幫你做什麼,範例如下:

./shell/install.sh 的內容如下,我在這個檔案定義了 runner 在啟動 docker 之後、執行 django unit test 之前需要做些什麼:

這樣設定好之後,push 上 gitlab 就會在專案的「Pipelines」→「Builds」看到測試的狀況,如果測試成功就會在這個 Build 及 Pipeline 看到 passed 的標誌:

如果另外還有在 gitlab 設定和 Slack 的整合,Build 的結果也會一起吐到 Slack 上面。

在 docker 中使用 Elasticsearch 作為 django 的 search backend

目前手上的專案用了 django 作為網站的 Framework,而為了確保所有開發人員能夠在自己的開發機上用相同的環境進行開發,所以我們把整個 django 專案用 docker-compose 包裝成容器。

且為了未來專案正式上線時,可以放在 AWS 上,並盡量使用 AWS 的 managed service,所以選擇了 Elasticsearch 來作為 search backend。

這篇文章是把 Elasticsearch 加入 docker-compose 中的 django 專案的筆記。

閱讀更多

新同文堂無法在 Firefox 使用後的簡繁轉換方案

2017-04-26: 新同文堂新版 release 了,這個版本在 Firefox 53.0 上使用沒有問題,所以就不再需要使用 workaround 了

新同文堂這個簡繁轉換套件,在開啟了 e10s 之後的 Firefox 中無法使用的問題困擾我有一陣子了。現在似乎也從附加元件中下架了。在這之後一直沒有找到順手的替代方案。今天稍微拜了一下 Google 才發現這個走 Greasemonkey 的替代方案。

  1. 如果 Firefox 沒有安裝 Greasemonkey 套件的話,請先到這裡安裝
  2. 安裝簡繁自由切換這個 Greasemonkey script

以後如果再遇到簡體中文網頁,就會自動轉換成正體中文。

數位機上盒奇怪的 UI/UX 設計

其實我不是 UI/UX 專家,不過因為家裡同時裝了中華電信 MOD 以及台灣大寬頻 CATV 的數位機上盒,正好可以比較一下這兩家應該是國內最大的數位電視供應商。

剛搬到現在住的地方時,和光世代一起裝了中華電信 MOD。但是以我個人的收視習慣來說,沒有緯來日本台和國興衛視兩個頻道,直接降低了讓我打開電視的誘因。所以這段期間我比較常用 Apple TV 看 Netflix。這樣撐了兩年,因為還是想看上述兩個頻道,所以又裝了台灣大寬頻 CATV

台灣大寬頻 CATV 和以前第四台的收視習慣比較接近,第四台有的頻道它都有,MOD 有些國外的頻道像是 FX、Comedy Central 也都有。所以馬上就變成看電視的主力了。中華電信 MOD 幾乎就不會打開了。

但老是覺得用起來不太對,這才發現台灣大寬頻 CATV 的遙控器有個很奇怪的設定。

因為數位電視的時代有即時節目表這種東西,所以循序換頻道(1→2→3→4)習慣會到節目表裡面用遙控器十字鍵的上、下鍵來換(如下圖綠色區),而且 MOD 的節目表很好用,在一個畫面內可以看到大量的節目資訊,所以這樣使用不會有什麼問題。

但是台灣大寬頻 CATV 這樣用就糟糕了,因為他的節目表「很不好用」,所以轉台時會變成要馬直接按數字,要馬直接用遙控器上的「選台」來循序換頻道。

於是這樣就撞牆了,在節目表中,循序增加頻道是按十字鍵的「下」,但是如果要用「選台」鍵來換頻道,卻是按「選台」的「上」。要是依照習慣按了「下」,頻道會變成遞減(4→3→2→1)

在中華電信的 MOD 上,遙控器其實也是這樣的行為。但是因為他節目表好用,所以不自覺的我就不再使用遙控器「選台」這個鍵了,用節目表選台更方便啊,於是也就避開了這個問題。在台灣大寬頻這邊我就是一天到晚按錯,頻率高到覺得困擾了。

其實我希望台灣大寬頻 CATV 這邊能強化節目表啦,現在的節目表在各個區塊都留了大片的空白,又醜又浪費空間。如果能做到接近 MOD 的資訊量,用起來肯定更方便吧。

[macOS] 重新安裝系統後自然輸入法無法輸入中文

前陣子 clean install 了 2015 Macbook pro 的作業系統,結果裝完之後發現自然輸入法爛掉了。症狀如下:

  1. 首先先安裝自然輸入法 v11 for Mac
  2. 裝好之後依照指示登出/重新開機
  3. 按 cmd-space 切換到自然輸入法
  4. 開始打字,螢幕上會出現相對應的注音
  5. 按到 3 4 6 7(也就是聲調)時,正常應該是會直接輸出剛剛輸入的注音以及聲調所組成的中文字,但這邊會直接把數字輸出,打不出中文
  6. 然後自然輸入法就爛掉了,再按 cmd-space 把它叫出來也打不出注音了

但奇怪的是,家裡另外一台 Mac mini 一樣是跑 macOS Sierra 卻沒有問題。

遇到這個問題後多次從網站、從 Email 和自然輸入法的開發商網際智慧聯繫,全都石沈大海,完全沒有任何回覆。

只好暫時先改用小麥注音,每天都覺得不太順手。直到一天忽然靈機一動想到,我重新安裝 macOS 的時候有把整個分割區砍掉重做,當時是把它做成 HFS+ (Case Sensitive) 的格式,也就是區分大小寫的檔案系統。因為這樣的關係,自然輸入法在讀取檔案的時候可能就有些東西讀不到於是就爛掉了。

重新把檔案系統做成一般的 HFS+ 之後重新安裝 macOS,嗯,果然一切正常。

所以說凡事還是要靠自己,廠商如果不鳥你真的是拿他沒皮條。

至於在網路上大量搜尋解決方法時,翻到自然輸入法的一些黑歷史這件事嘛…以後應該不會再買他們家的產品了。