Mix.Config から Config への移行
Config を使うには
軽くハマったので記載しておく.が,最初に書いておくと,ちゃんと公式の migration に記載があるので,こちらを精読することをおすすめする.
Mix.Config が deprecated で 代わりに Config を使え ということらしい.Config は Elixir の標準ライブラリなのでそっちのほうが推奨ということっぽい.
古い Phoenix のアプリだと,Mix.Config を使ったコードになっているはずで,公式では移行手順が示されている.
https://hexdocs.pm/elixir/main/Config.html#module-migrating-from-use-mix-config
- config ファイル(config/config.exs など)で
use Mix.Config
をimport Config
に変更する import_config
で指定している path でワイルドカードで解決している箇所を個別に変換する.- config ファイル内の
Mix.env()
をconfig_env()
に変更する.project ファイル内でのMix.env()
の使用も避ける. - project 内で environment を取得する場合は,config ファイル内で :env を定義する.
:env を定義する.
# config.exsconfig :my_app, env: config_env()
App 内ではこんな感じで取得/判定に使用できる.
if Application.fetch_env!(:my_app, :env) == :prod do ...end
といいつつ,現時点の Phoenix の最新で phx.new してみると,いくつか Mix.env()
をそのまま使っている箇所もある.
% mix phx.new hogehoge && cd hogehoge% mix phx.new -vPhoenix installer v1.6.8% grep "Mix.env()" . -R | grep -vE "^./deps" ./mix.exs: elixirc_paths: elixirc_paths(Mix.env()),./mix.exs: start_permanent: Mix.env() == :prod,./mix.exs: {:esbuild, "~> 0.4", runtime: Mix.env() == :dev},./lib/hogehoge_web/router.ex: if Mix.env() in [:dev, :test] do./lib/hogehoge_web/router.ex: if Mix.env() == :dev do
とはいえ,いちいち fetch_env! するのもなんかいまいちなので(あちこちで env を取得するコードがあるのがそもそもいまいちかもしれないが・・),Context が env を返すような関数を生やしてみた.これがいいやり方かはよくわからない・・