web-dev-qa-db-fra.com

l'adaptateur Ecto.Adapters.Postgres n'a pas été compilé

Je n'arrive pas à créer mon projet Phoenix. J'adorerais quelques conseils sur la façon de le réparer.

Détails de configuration:

  • Ubuntu 16.04.4 LTS
  • Erlang/OTP 21 [erts-10.1] [source] [64 bits] [smp: 1: 1] [ds: 1: 1: 10] [async-threads: 1] [hipe]
  • Elixir 1.7.3 (compilé avec Erlang/OTP 20)
  • Mix 1.7.3 (compilé avec Erlang/OTP 20)
  • Ecto v3.0.0

Je suis le Phoenix Up and Running pour faire une application.

mix phx.new hello
cd hello
mix ecto.create

la dernière commande me donne:

 == 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

J'ai installé postgres. J'ai un super utilisateur postgres.

22
Devatanu

As-tu phoenix_ecto 3.5.0 dans vos dépendances? La rétrogradation à 3.4.0 a fonctionné pour moi comme un correctif temporaire jusqu'à ce que je trouve le problème sous-jacent.

Pour forcer une rétrogradation:

  1. Courir mix deps.clean --all
  2. Supprimez votre mix.lock fichier
  3. Mettez à jour votre mix.exs fichier limitant le phoenix_ecto version. Recherchez la ligne appropriée et remplacez-la par: {:phoenix_ecto, ">= 3.2.0 and < 3.5.0"},
  4. Courir mix deps.get

Alternativement, si vous débutez avec Phoenix, vous pouvez utiliser la version 1.4 pour apprendre, qui sortira bientôt et ne présente pas ce problème.

Supprimez d'abord votre archive Phoenix locale actuelle:

mix archive.uninstall phx_new

Ensuite, pour installer la dernière version de développement , suivez les instructions dans https://github.com/phoenixframework/phoenix/blob/master /installer/README.md

8
Juan Uicich

À partir d'Ecto 3.0, Ecto.Adapters.Postgres n'est pas fourni avec Ecto par défaut, vous devez donc ajouter ecto_sql aux dépendances Mixfile:

###########
# 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

(L'arbre Ecto github repo v3.0. recommande {:ecto_sql, "~> 3.0"}, mais la dernière version est la 3.0.0-rc.1) donc cela ne fonctionnera pas pour l'instant. Fait intéressant, il n'y a pas de 3.0.0-rc.1 tag dans le dépôt, mais la documentation y fait déjà référence et cela fonctionne aussi avec mix. )

... ou, comme Yufrend recommande dans sa réponse , si vous démarrez un nouveau projet Phoenix, utilisez des packages <1.4.0.


Voir la série --- de José Valim "Un aperçu de Ecto 3.0" où le premier post explique les changements de rupture dans Ecto 3.0:

Divisez Ecto en ecto et ecto_sql

Ecto 3.0 sera divisé en deux référentiels: ecto et ecto_sql. Depuis Ecto 2.0, un nombre croissant de développeurs et d'équipes utilisent Ecto pour la cartographie et la validation des données, sans avoir besoin d'une base de données. Cependant, l'ajout d'Ecto à votre application apporterait encore beaucoup de bagages SQL, tels que des adaptateurs, des bacs à sable et des migrations, que beaucoup considéraient comme un message mixte.

Dans Ecto 3.0, nous déplacerons tous les adaptateurs SQL vers un référentiel séparé et Ecto se concentrera sur les quatre blocs de construction: schémas, changesets, requêtes et repos. Vous pouvez voir la discussion dans le tracker de problèmes.

Si vous utilisez Ecto avec une base de données SQL, la migration vers Ecto 3.0 sera très simple. Au lieu de:

{:ecto, "~> 2.2"}

Vous devez lister:

{:ecto_sql, "~> 3.0"}

Et si vous utilisez Ecto uniquement pour la manipulation de données mais sans accès à la base de données, il s'agit simplement de bumper sa version. C'est ça!


MISE À JOUR

Pour une raison quelconque, j'ai également dû ajouter {:plug_cowboy, "~> 1.0"} aux dépendances Mixfile lors de la mise à jour d'un projet Phoenix 1.3 et tout a commencé à fonctionner.

18
toraritte

De nouveaux projets

Pour créer de nouveaux projets avec Ecto 3.0, il est fortement recommandé de passer au nouveau phoenix 1.4.x installateur:

$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0-rc.2

Projets existants

Pour mettre à niveau votre Phoenix existant 1.3.x projets à 1.4, lisez le Guide de mise à niveau officiel et l'accompagnement annonce .

TLDR est que Ecto a été divisé en sous-packages, et vous devez les spécifier explicitement:

Supprimez votre :ecto dépendance et mettez à jour votre :phoenix_ecto et :ecto_sql dépendances avec les versions suivantes:

{:ecto_sql, "~> 3.0-rc"},
{:phoenix_ecto, "~> 4.0"},
2
Sheharyar

L'installation de la nouvelle version phoenix a fonctionné pour moi.

Désinstaller l'ancienne version:

mix archive.uninstall phx_new

Installez la nouvelle version:

mix archive.install hex phx_new 1.4.0-rc.2

2
Yufrend