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
で引数に指定する。