web-dev-qa-db-ja.com

アダプターEcto.Adapters.Postgresはコンパイルされませんでした

Phoenixプロジェクトを作成できません。それを修正する方法についてのアドバイスをお願いします。

セットアップの詳細:

  • Ubuntu 16.04.4 LTS
  • Erlang/OTP 21 [erts-10.1] [ソース] [64ビット] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]
  • Elixir 1.7.3(Erlang/OTP 20でコンパイル)
  • ミックス1.7.3(Erlang/OTP 20でコンパイル)
  • Ecto v3.0.0

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スーパーユーザーがいます。

22
Devatanu

依存関係にphoenix_ecto 3.5.0がありますか?根本的な問題が判明するまで、一時的な修正として3.4.0へのダウングレードが機能しました。

強制的にダウングレードするには:

  1. mix deps.clean --allを実行します
  2. mix.lockファイルを削除します
  3. mix.exsバージョンを制限してphoenix_ectoファイルを更新します。適切な行を見つけて、次と置き換えます:{:phoenix_ecto, ">= 3.2.0 and < 3.5.0"},
  4. mix deps.getを実行します

あるいは、Phoenixから始めたばかりの場合は、バージョン1.4を使用して学習することもできます。バージョン1.4は間もなくリリースされ、この問題はありません。

まず、現在のローカルフェニックスアーカイブを削除します。

mix archive.uninstall phx_new

次に、最新の開発バージョンをインストールするには、 https://github.com/phoenixframework/phoenix/blob/masterの指示に従ってください/installer/README.md

8
Juan Uicich

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をectoecto_sqlに分割します

Ecto 3.0は、ectoecto_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"}を追加する必要があり、すべてが機能し始めました。

18
toraritte

新しいプロジェクト

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"},
2
Sheharyar

新しいバージョンのphoenixをインストールするとうまくいきました。

古いバージョンをアンインストールします。

mix archive.uninstall phx_new

新しいバージョンをインストールします。

mix archive.install hex phx_new 1.4.0-rc.2

2
Yufrend