адаптер Ecto.Adapters.Postgres не был скомпилирован
Я не могу создать свой проект Phoenix. Очень хотелось бы несколько советов о том, как это исправить.
Детали настройки:
- Ubuntu 16.04.4 LTS
- Erlang/OTP 21 [erts-10.1] [source] [64-bit] [smp: 1:1] [ds: 1:1: 10] [async-threads: 1] [hipe]
- Эликсир 1.7.3 (скомпилировано с Erlang/OTP 20)
- Mix 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.
Ответы
Ответ 1
Есть ли у вас 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 для изучения, которая скоро будет выпущена и не будет иметь этой проблемы.
Сначала удалите свой текущий локальный архив Феникса:
mix archive.uninstall phx_new
Затем, чтобы установить последнюю версию разработки, следуйте инструкциям в https://github.com/phoenixframework/phoenix/blob/master/installer/README.md
Ответ 2
Начиная с Ecto 3.0, Ecto.Adapters.Postgres
не поставляется с Ecto по умолчанию, поэтому вы должны добавить ecto_sql
к зависимостям 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
(Дерево Ecto github repo v3.0.0 рекомендует {:ecto_sql, "~> 3.0"}
, но последний выпуск - 3.0.0-rc.1
), поэтому на данный момент оно не будет работать. Интересно, что в репо 3.0.0-rc.1
тега 3.0.0-rc.1
, но документация уже ссылается на это, и он также работает со mix
.)
... или, как Юфренд рекомендует в своем ответе, если вы начинаете новый проект Phoenix, используйте пакеты <1.4.0.
См. Серию статей Хосе Валима "Проникновение в Ecto 3.0", где в первом посте рассказывается о переломных изменениях в Ecto 3.0:
Сплит Ecto в ecto
и ecto_sql
Экто 3.0 будет сломана в двух местах хранения: ecto
и ecto_sql
. Начиная с Ecto 2.0, все большее число разработчиков и команд используют Ecto для отображения и проверки данных без необходимости в базе данных. Тем не менее, добавление Ecto в ваше приложение все равно принесет большой багаж SQL, такой как адаптеры, песочницы и миграции, что многие считают смешанным сообщением.
В Ecto 3.0 мы переместим все адаптеры SQL в отдельный репозиторий, а Ecto сосредоточится на четырех строительных блоках: схемах, наборах изменений, запросах и репозиториях. Вы можете увидеть обсуждение в трекере вопросов.
Если вы используете Ecto с базой данных SQL, переход на Ecto 3.0 будет очень простым. Вместо:
{:ecto, "~> 2.2"}
Вы должны перечислить:
{:ecto_sql, "~> 3.0"}
И если вы используете Ecto только для манипулирования данными, но без доступа к базе данных, то это просто вопрос повышения его версии. Это оно!
ОБНОВИТЬ
По какой-то причине мне также нужно было добавить {:plug_cowboy, "~> 1.0"}
к зависимостям Mixfile при обновлении проекта Phoenix 1.3, и все это начало работать.
Ответ 3
Установка новой версии Phoenix работала на меня.
Удалить старую версию:
mix archive.uninstall phx_new
Установите новую версию:
mix archive.install hex phx_new 1.4.0-rc.2
Ответ 4
Новые проекты
Для создания новых проектов с 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
, ознакомьтесь с Официальным руководством по обновлению и прилагаемым объявлением.
TL;DR состоит в том, что Ecto
был разбит на подпакеты, и вам необходимо указать их явно:
Удалите Явный :ecto
зависимость и обновить :phoenix_ecto
и :ecto_sql
зависимости со следующими версиями:
{:ecto_sql, "~> 3.0-rc"},
{:phoenix_ecto, "~> 4.0"},