postgresql - docs - adaptador Ecto.Adapters.Postgres no fue compilado
github phoenix framework (4)
Proyectos nuevos
Para crear nuevos proyectos con Ecto 3.0
, se recomienda encarecidamente que actualice al nuevo instalador phoenix 1.4.x
:
$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0-rc.2
Proyectos existentes
Para actualizar sus proyectos existentes de Phoenix 1.3.x
a 1.4
, lea la Guía de actualización oficial y el announcement adjunto.
TLDR es que Ecto
se ha dividido en subpaquetes, y debe especificarlos explícitamente:
Elimine su dependencia explícita
:ecto
y actualice sus dependencias:phoenix_ecto
y:ecto_sql
con las siguientes versiones:
{:ecto_sql, "~> 3.0-rc"}, {:phoenix_ecto, "~> 4.0"},
No puedo crear mi proyecto Phoenix. Me encantaría algún consejo sobre cómo solucionarlo.
Detalles de la configuración:
- Ubuntu 16.04.4 LTS
- Erlang / OTP 21 [erts-10.1] [fuente] [64 bits] [smp: 1: 1] [ds: 1: 1: 10] [async-threads: 1] [hipe]
- Elixir 1.7.3 (compilado con Erlang / OTP 20)
- Mix 1.7.3 (compilado con Erlang / OTP 20)
- Ecto v3.0.0
Estoy siguiendo a Phoenix Up and Running para hacer una aplicación.
mix phx.new hello
cd hello
mix ecto.create
El último comando me da:
== 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
Tengo postgres instalados. Tengo postgres superusuario.
¿Tienes phoenix_ecto
3.5.0 en tus dependencias? La degradación a 3.4.0 funcionó para mí como una solución temporal hasta que descubro el problema subyacente.
Para forzar una baja:
- Ejecutar
mix deps.clean --all
- Borre su archivo
mix.lock
- Actualice su archivo
mix.exs
limitando la versiónphoenix_ecto
. Encuentre la línea apropiada y reemplace con:{:phoenix_ecto, ">= 3.2.0 and < 3.5.0"},
- Ejecutar
mix deps.get
Alternativamente, si recién comienza con Phoenix, puede usar la versión 1.4 para aprender, que se lanzará pronto y no tiene este problema.
Primero elimine su archivo local actual de Phoenix:
mix archive.uninstall phx_new
Luego, para instalar la última versión de desarrollo , siga las instrucciones en https://github.com/phoenixframework/phoenix/blob/master/installer/README.md
A partir de Ecto 3.0, Ecto.Adapters.Postgres
no se incluye con Ecto de manera predeterminada, por lo tanto, debe agregar ecto_sql
a las dependencias de 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
( El árbol Ecto github repo v3.0.0 recomienda {:ecto_sql, "~> 3.0"}
, pero la última versión es la 3.0.0-rc.1
) por lo tanto, no funcionará a partir de ahora. Curiosamente, no hay 3.0.0-rc.1
etiqueta 3.0.0-rc.1
en el repositorio, pero la documentación ya hace referencia a eso y también funciona con la mix
. )
... o, como lo recomienda Yufrend en su respuesta , si está comenzando un nuevo proyecto de Phoenix, use los paquetes <1.4.0.
Vea la serie de José Valim "Un adelanto en Ecto 3.0" donde el primer post explica los cambios en Ecto 3.0:
Dividir Ecto en
ecto
yecto_sql
Ecto 3.0 se
ecto_sql
en dos repositorios:ecto
yecto_sql
. Desde Ecto 2.0, un mayor número de desarrolladores y equipos han estado utilizando Ecto para el mapeo y validación de datos, sin necesidad de una base de datos. Sin embargo, agregar Ecto a su aplicación aún traerá gran parte del equipaje de SQL, como adaptadores, espacios limitados y migraciones, que muchos consideraron un mensaje mixto.En Ecto 3.0, moveremos todos los adaptadores SQL a un repositorio separado y Ecto se centrará en los cuatro bloques de construcción: esquemas, conjuntos de cambios, consultas y repositorios. Puedes ver la discusión en el tracker de temas.
Si está utilizando Ecto con una base de datos SQL, la migración a Ecto 3.0 será muy sencilla. En lugar de:
{:ecto, "~> 2.2"}
Deberías enumerar:
{:ecto_sql, "~> 3.0"}
Y si está utilizando Ecto solo para la manipulación de datos pero sin acceso a la base de datos, es solo cuestión de golpear su versión. ¡Eso es!
ACTUALIZAR
Por alguna razón, también necesitaba agregar {:plug_cowboy, "~> 1.0"}
a las dependencias de Mixfile al actualizar un proyecto Phoenix 1.3 y todo comenzó a funcionar.
Instalar la nueva versión de Phoenix funcionó para mí.
Desinstalar la versión anterior:
mix archive.uninstall phx_new
Instalar nueva versión:
mix archive.install hex phx_new 1.4.0-rc.2