Dancer2與DBIx整合開發環境設定

2014年碰過的Perl + Dancer2 with DBIx, 很快的馬上就又需要恢復記憶,快速來組合一下該怎麼用:

Dancer是基於Perl的web framework(目前booking.com也是使用dancer2做為其Web API開發使用的framework), 容易上手而且方便,而且也可以整合DBIx使用。DBIx是什麼呢?其實DBIx是個基於Perl的ORM framework。以後端工程師來說,有web framework + orm已經可以打全場了。(當然該用native SQL的還是要用,不代表ORM就真的是全能的)

開發環境建議使用Ubuntu,本文採用Perl 5.17以上版本開發

設定開發環境

  1. 先安裝Dancer2跟其他相關套件
title: install Perl Dancer2
1
sudo apt-get install libdancer2-perl libyaml-perl

或是利用cpanm來安裝

  1. 安裝後,設定一個新的專案
title: install Perl Dancer2
1
dancer2 -a project_name
  1. 安裝DBIx套件
title: install Perl Dancer2
1
sudo apt-get install libdbi-perl libdancer-plugin-dbic-perl 

建立開發環境 (使用docker和docker-compose)

其實之前已經寫好了docker file, 內容如下:

title:docker file content
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
FROM ubuntu:18.04
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y less wget && \
apt-get install -y build-essential && \
apt-get install -y vim git && \
apt-get install -y libdbd-mysql-perl && \
apt-get install -y libdancer2-perl && \
apt-get install -y libdbi-perl && \
apt-get install -y libdancer-plugin-dbic-perl && \
apt-get install -y libdigest-sha-perl && \
apt-get install -y libmime-base64-urlsafe-perl && \
apt-get install -y libdatetime-format-mysql-perl && \
apt-get install -y libmath-round-perl && \
apt-get install -y libdata-pageset-perl && \
apt-get install -y cpanminus && \
apt-get install -y libyaml-perl && \
apt-get install -y libtext-csv-perl && \
cpanm Dancer2::Plugin::DBIC && \
echo "DONE"


CMD [ "plackup", "/opt/bin/app.psgi" ]

當然我們將資料庫的部分,利用docker-compose來處理 (資料庫使用MariaDB做為範例)

title:docker file content
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3'
services:
db:
image: "mariadb:10.3.16-bionic"
ports:
- "3306:3306"
volumes:
- /tmp:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: root
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MARIADB_MAJOR: 10.3
MARIADB_VERSION: 1:10.3.16+maria~bionic

web:
build: .
ports:
- "3000:5000"
volumes:
- .:/opt
links:
- db
environment:
env: development

這樣就可以直接將docker當成是服務器來使用(當然要設定好程式放置的位置)。

開始使用

前面的部分都準備好後,我們先利用docker-compose把service啟動,接下來需要在project的資料夾內執行:

title:run perl service by docker
1
docker run --rm -it -p 3001:3000 dancer

如果碰到已經有資料庫和table的狀況下,可以利用以下指令build model

title:Build model by DBIx command
1
dbicdump -o dump_directory=dump_lib_path Module_name::class_name 'dbi:mysql:host=127.0.0.1;database=db_name' db_user_name db_user_pass

以下為範例

title:Build model by DBIx command example
1
dbicdump -o dump_directory=./lib DAO::Foo 'dbi:mysql:host=127.0.0.1;database=bar' username password

當然也可以利用DBIx的document撰寫建立model的指令

資料參考:Dancer in Docker