開発日記

気が向いたときに書く日記

Elixir Mix.Configで環境毎にConfigを使い分ける

開発環境により使用するConfigを使い分ける。
流れとしては、Mix.Configにimport宣言を追加し環境ごとのConfigファイルを作成する。
コンパイル時、環境変数を設定しConfigを使い分ける。

Mix.Configの修正

Mix.Config – Mix v1.4.5
import_config "#{Mix.env}.exs"宣言を追加する。
以下config/config.exs

use Mix.Config

import_config "#{Mix.env}.exs"

config :stock_scraping, ecto_repos: [StockScrapingBatch.Repo]

Configファイル追加

dev.exs prod.exs を追加する。
以下config/dev.exs

use Mix.Config

config :stock_scraping_batch, StockScrapingBatch.Repo,
  adapter: Ecto.Adapters.MySQL,
  database: "stock_scraping",
  username: "ytoida",
  password: "",
  hostname: "127.0.0.1",
  port: 3306

環境変数を設定しコンパイルする

DockerfileにENTRYPOINTを定義し、引数で環境変数を渡すようにした。
以下Dockerfile

FROM elixir
MAINTAINER yuki-toida

RUN git clone https://github.com/yuki-toida/stock_scraping_batch.git root/stock_scraping_batch

WORKDIR /root/stock_scraping_batch

RUN mix local.hex --force && \
    mix local.rebar --force && \
    mix hex.info

RUN chmod +x run.sh

ENTRYPOINT ["./run.sh"]

CMD ["dev"]

以下run.sh

#!/bin/bash

# git pull
git pull origin master

# create executable shell script
mix deps.get
MIX_ENV=$1 mix escript.build

# execute
./stock_scraping_batch

これで引数無しでdocker runした場合はdev環境。
prod環境にしたい場合は、docker run --net="host" [イメージ名] prodで引数に指定する。