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:
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.
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:
mix deps.clean --all
mix.lock
fichiermix.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"},
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
À 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
etecto_sql
Ecto 3.0 sera divisé en deux référentiels:
ecto
etecto_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.
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
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"},
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