昨日は以下のようにDB接続を設定しました。
config.edn
:duct.database.sql/hikaricp
{:adapter "postgresql"
:server-name "localhost"
:port-number "5432"
:username "user"
:password "password"
:database-name "feed"}
今日は環境変数から読み込めるようにします
環境変数に置き換える
とはいってもやることは簡単です
config.edn
:duct.database.sql/hikaricp
{:adapter "postgresql"
:server-name #duct/env "DB_HOST"
:port-number #duct/env "DB_PORT"
:username #duct/env "DB_USER"
:password #duct/env "DB_PASS"
:database-name #duct/env "DB_NAME"}
#duct/env "変数名"
で環境変数を参照できます
試しに起動します
$ DB_HOST=localhost DB_PORT=5432 DB_USER=user DB_PASS=password DB_NAME=feed lein run
$ curl localhost:3000/v1/feeds | jq .
{
"feeds": [
{
"id": 1,
"url": "https://www.google.com",
"title": "Google",
"description": "Googleのトップページです。",
"created_at": "2024-12-19T05:24:36Z"
},
{
"id": 2,
"url": "https://www.yahoo.co.jp",
"title": "Yahoo! JAPAN",
"description": "Yahoo! JAPANのトップページです。",
"created_at": "2024-12-19T05:24:36Z"
}
]
}
ちゃんと接続ができてそうですね
デフォルト値を設定する
ただこれだと特にlocal環境では毎回環境変数を設定するのが億劫です
そこで、デフォルト値をlocalでの設定として設定してみます
config.edn
:duct.database.sql/hikaricp
{:adapter "postgresql"
:server-name #duct/env ["DB_HOST" :or "localhost"]
:port-number #duct/env ["DB_PORT" Int :or 5432]
:username #duct/env ["DB_USER" :or "user"]
:password #duct/env ["DB_PASS" :or "password"]
:database-name #duct/env ["DB_NAME" :or "feed"]}
このように設定しました。
:server-name #duct/env ["DB_HOST" :or "localhost"]
のように:or
でデフォルト値を設定できます
また、#duct/env ["DB_PORT" Int]
このようにすることで数値として変数を扱うことができます
環境変数を外から渡さずに起動してみます
$ lein repl
user=> (dev)
:loaded
dev=> (go)
:duct.server.http.jetty/starting-server {:port 3000}
:initiated
無事起動し、DB接続プールを作ることができてそうです