mix ecto.create で急にerrorがで始めた時の解決方法
対象者
2018.10.30近辺でPhoenixのチュートリアルにて学習開始し始めた初学者向け
なぜ書くのか?
Phoenixの公式ドキュメントと、フレームワークの構成が変更中の差分が発生している時に起こり得る初学者が辛い時期の差分解決としてのメモ
- というか、自分のため。
- ちなみに、mix phx.serverでエラーがでる人の解決方法はこちら:Phoenix 最初の第一歩 Mix phx.serverでerrorの解決方法に記載してます。
事件は再び起きた!
mix ecto.create
を打つと、次のエラーが!!!
Compiling 13 files (.ex)
warning: retrieving the :adapter from config files for ElixirSc.Repo is deprecated.
Instead pass the adapter configuration when defining the module:
defmodule ElixirSc.Repo do
use Ecto.Repo,
otp_app: :hello,
adapter: Ecto.Adapters.Postgres
lib/ecto/repo/supervisor.ex:100: Ecto.Repo.Supervisor.deprecated_adapter/3
lib/ecto/repo/supervisor.ex:64: Ecto.Repo.Supervisor.compile_config/2
lib/elixir_sc/repo.ex:2: (module)
(elixir) src/elixir_compiler.erl:71: :elixir_compiler.dispatch/4
(elixir) src/elixir_compiler.erl:68: :elixir_compiler.compile/3
(elixir) src/elixir_module.erl:281: :elixir_module.eval_form/6
(elixir) src/elixir_module.erl:79: :elixir_module.compile/5
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) src/elixir.erl:265: :elixir.eval_forms/4
(elixir) src/elixir_compiler.erl:49: :elixir_compiler.eval_forms/3
(elixir) src/elixir_lexical.erl:17: :elixir_lexical.run/2
(elixir) src/elixir_compiler.erl:23: :elixir_compiler.quoted/2
(elixir) lib/kernel/parallel_compiler.ex:206: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6
== Compilation error in file lib/elixir_sc/repo.ex ==
** (ArgumentError) adapter Ecto.Adapters.Postgres was not compiled, ensure it is correct and it is included as a project dependency
lib/ecto/repo/supervisor.ex:71: Ecto.Repo.Supervisor.compile_config/2
lib/elixir_sc/repo.ex:2: (module)
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:206: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6
で解決方法は以下です。
※下記の1.などの数字は打たない。 順番を示している物です。
1. mix deps.clean --all
2. rm -rf mix.lock
3. mix.exsを書き換える。書き換えは以下参照
mix.exsの書き換え
befor
defp deps do
[
{:phoenix, "~> 1.3.4"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, ">= 3.2.},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"}
]
end
After
※ 今回は、{:phoenix_ecto, ">= 3.2}
のところを次のように書き換えるのが目的ですが、{:phoenix_ecto, ">= 3.2.0 and < 3.5.0"}
ついでに、phx.server
でerrorになる原因の箇所も追記しておく{:plug_cowboy, "~> 1.0"}
defp deps do
[
{:phoenix, "~> 1.3.4"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, ">= 3.2.0 and < 3.5.0"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{:plug_cowboy, "~> 1.0"}
]
end
上記の書き換えが終わったら、次のコマンドを打つと、mix ecto.create
で無事に成功し、mix phx.server
で無事に立ち上がる。
1. mix deps.get
2. mix ecto.create
3. mix phx.server
Elixir の勉強会を毎週火曜日10時または、11時から13時までやってます。基本はオンラインで、月に1回
オフラインで会ってやってます。興味ある方は声かけてください。
ちなみに、最近覚えたてのReactでYOSUKENAKAO.meというサイトを立ち上げました。
バック側の仕組みをElixirで作りたいと奮闘してますw