【metabase • 一】開發準備

喬治大大發表於2020-12-20

開發概述

  • Metabase採用前後端分離的方式構建,前端使用react搭建頁面,後端使用clojure提供REST API介面,詳見 API Document
  • Metabase提供了官方文件Developers Guide,對開發環境和執行方式進行了簡要說明;
  • 本文件主要側重於Clojure部分,前端涉及技術棧比較主流,網上各種文章分析也很全面,就不重複討論了。

clojure學習

  • Clojure比較冷門,網上學習資料也比較少,因此以官方文件和英文資料為主;
    • 中文基礎教程 主要涵蓋了基本語法的教程,內容不多,適合起步閱讀;
    • 官方基礎教程 同樣是基礎語法教程,內容不多,英文版;
    • Clojars Clojure的依賴倉庫,類似於java的Maven Repository;
    • ClojureDocs Clojuer語法檢索,比如輸入 map 會檢索出map的用法和多個使用示例,非常好用
    • 4Clojure 包含156道Clojure入門練習題,對於快速掌握語法很有幫助

clojure開發配置

  • 官方網站對Clojure安裝進行了說明,詳見Getting Started
  • 個人總結的安裝步驟包括:
  1. 在Mac上安裝Clojure建議使用Homebrew,一鍵安裝簡單方便。

Homebrew官方網站有詳細的安裝指引,但出於大家都懂的原因,國內沒辦法按流程安裝,網上能搜到各種攻略,但第一次配置還是比較艱難的,推薦使用金牛肖馬分享的安裝指令碼,流程清晰操作簡單,連結 Homebrew國內安裝

  1. 安裝Leiningen,可以理解為可以理解為Clojure用的Maven,必不可少的包管理工具,也是Clojure官網推薦的,Leiningen官網

Leiningen官網推薦的安裝方式是下載指令碼並在本地執行,指令碼執行時要多次訪問github,出於大家都懂的原因,需要先解決github訪問的問題;

  • github訪問不了的主要方式是DNS地址汙染,因此可以通過在本地hosts檔案中繫結IP地址的方式解決,網上教程也很多,自行百度即可;
  • 請注意github的IP在2020年中變化過一次,因此早期的教程可能不起作用,最好是自己先手動查一下最新的IP地址
  1. 安裝Cursive,執行在Idea中的Clojure語言外掛,直接在Idea中搜尋安裝即可,使用教程可查閱Cursive官網
  • 網上有些文件會建議安裝cursive和leiningen兩個外掛,其實只安裝cursive就夠了,安裝了leiningen反而會衝突報錯;
  • Clojure專案在Idea中若直接通過Idea中File → Open的方式開啟會報錯,因為Cursive需要在第一次匯入專案時先建索引,因此要通過 File → New → Project from Existing Sources 的方式匯入;
    直接在Idea中新建的專案和已經建好索引的專案可以直接開啟,不需要每次開啟時都重建索引;
  • 右鍵點選 project.clj 檔案,選擇 Run ‘REPL for XXX’ 將在Idea中執行REPL,優勢是可以使用快捷鍵實時將程式碼匯入到REPL中,非常靈活
  • Ideal螢幕右下方 structural style 建議選擇 Parinfer,自動匹配括號,極其方便

常用指令

  • lein使用

leiningen常用命令(需要於project.clj檔案所在目錄下執行)

  • lein deps 手動下載專案依賴,若跳過該指令執行專案前也會自動下載依賴
  • lein runproject.clj 中配置的 :main 作為執行入口,執行 -main 方法
  • lein ring server 執行lein-ring外掛配置,執行服務端
  • lein new project_name 按照預設模版,建立名為 project_name 的新任務

開發執行

  • 官方推薦:yarn build-hot 啟動前端, lein run 啟動後端
  • 前後端均啟動後,訪問 http://localhost:3000/ 可進行頁面操作(注意不是訪問8080)

metabase預設使用內嵌h2儲存後設資料,但推薦在生產環境遷移到MySQL或PostgreSQL

  • 若希望將h2資料遷移到MySQL,可參閱 官方文件 ,啟動程式碼如下:
    MB_DB_TYPE=mysql MB_DB_HOST=172.0.0.1 MB_DB_PORT=3306 MB_DB_USER=username MB_DB_DBNAME=metabase MB_DB_PASS=password lein run load-from-h2
  • 即使換成遷移,下次啟動時仍會預設採用h2資料庫,使用MySQL資料庫仍需要配置引數:
    MB_DB_TYPE=mysql MB_DB_HOST=172.0.0.1 MB_DB_PORT=3306 MB_DB_USER=username MB_DB_DBNAME=metabase MB_DB_PASS=password lein run

相關文章