Phoenixプロジェクトを作成できません。それを修正する方法についてのアドバイスをお願いします。
セットアップの詳細:
Phoenix Up and Running に従ってアプリを作成しています。
mix phx.new hello
cd hello
mix ecto.create
最後のコマンドは私に与えます:
== Compilation error in file lib/hello/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/hello/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
Postgresがインストールされています。 postgresスーパーユーザーがいます。
依存関係にphoenix_ecto
3.5.0がありますか?根本的な問題が判明するまで、一時的な修正として3.4.0へのダウングレードが機能しました。
強制的にダウングレードするには:
mix deps.clean --all
を実行しますmix.lock
ファイルを削除しますmix.exs
バージョンを制限してphoenix_ecto
ファイルを更新します。適切な行を見つけて、次と置き換えます:{:phoenix_ecto, ">= 3.2.0 and < 3.5.0"},
mix deps.get
を実行しますあるいは、Phoenixから始めたばかりの場合は、バージョン1.4を使用して学習することもできます。バージョン1.4は間もなくリリースされ、この問題はありません。
まず、現在のローカルフェニックスアーカイブを削除します。
mix archive.uninstall phx_new
次に、最新の開発バージョンをインストールするには、 https://github.com/phoenixframework/phoenix/blob/masterの指示に従ってください/installer/README.md
Ecto 3.0以降では、Ecto.Adapters.Postgres
はデフォルトでEctoに同梱されていません。そのため、Mixfileの依存関係にecto_sql
を追加する必要があります。
###########
# mix.exs #
###########
defp deps do
[
# (...)
{:ecto_sql, "~> 3.0-rc.1"},
{:postgrex, ">= 0.0.0"}
]
end
# Feeling skittish about dependencies,
# I usually do this instead of simply
# doing `mix deps.get`:
$ mix deps.clean --all
$ mix do deps.get, compile
(Ecto github repo v3.0.0 tree は{:ecto_sql, "~> 3.0"}
を推奨しますが、最新リリースは3.0.0-rc.1
であるため、現時点では機能しません今。興味深いことに、リポジトリには3.0.0-rc.1
タグはありませんが、 ドキュメント は既にそれを参照しており、mix
。)でも動作します
...または、 Yufrendが答えで推奨している のように、新しいPhoenixプロジェクトを開始する場合は、<1.4.0パッケージを使用します。
JoséValimの 「Ecto 3.0のスニークピーク」シリーズ を参照してください。最初の投稿では、Ecto 3.0の重大な変更について説明しています。
Ectoを
ecto
とecto_sql
に分割しますEcto 3.0は、
ecto
とecto_sql
の2つのリポジトリで破損します。 Ecto 2.0以来、データベースを必要とせずに、データマッピングと検証にEctoを使用する開発者とチームが増えています。ただし、アプリケーションにEctoを追加すると、アダプター、サンドボックス、移行など、多くの混合メッセージと見なされるSQLの手荷物が多くなります。Ecto 3.0では、すべてのSQLアダプターを個別のリポジトリに移動し、Ectoはスキーマ、変更セット、クエリ、リポジトリの4つの構成要素に焦点を当てます。 問題トラッカーで議論を見ることができます。
SQLデータベースでEctoを使用している場合、Ecto 3.0への移行は非常に簡単です。の代わりに:
{:ecto, "~> 2.2"}
リストする必要があります:
{:ecto_sql, "~> 3.0"}
また、Ectoをデータ操作のみに使用し、データベースアクセスを使用していない場合は、バージョンを上げるだけです。それでおしまい!
更新
何らかの理由で、Phoenix 1.3プロジェクトを更新するときにMixfileの依存関係に{:plug_cowboy, "~> 1.0"}
を追加する必要があり、すべてが機能し始めました。
Ecto 3.0
を使用して新しいプロジェクトを作成するには、新しいphoenix 1.4.x
インストーラーにアップグレードすることを強くお勧めします。
$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0-rc.2
既存のPhoenix 1.3.x
プロジェクトを1.4
にアップグレードするには、 Official Upgrade Guide および付随する announcement を読んでください。
TLDRは、Ecto
がサブパッケージに分割されているため、それらを明示的に指定する必要があります:
明示的な
:ecto
依存関係を削除し、:phoenix_ecto
および:ecto_sql
依存関係を次のバージョンに更新します。{:ecto_sql, "~> 3.0-rc"}, {:phoenix_ecto, "~> 4.0"},
新しいバージョンのphoenixをインストールするとうまくいきました。
古いバージョンをアンインストールします。
mix archive.uninstall phx_new
新しいバージョンをインストールします。
mix archive.install hex phx_new 1.4.0-rc.2