адаптер Ecto.Adapters.Postgres не был скомпилирован - PullRequest
0 голосов
/ 29 октября 2018

Я не могу создать свой проект Phoenix. Очень хотелось бы получить несколько советов о том, как это исправить.

Подробности настройки:

  • Ubuntu 16.04.4 LTS
  • Erlang / OTP 21 [erts-10.1] [source] [64-bit] [smp: 1: 1] [ds: 1: 1: 10] [асинхронные потоки: 1] [hipe]
  • Эликсир 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.

Ответы [ 4 ]

0 голосов
/ 30 октября 2018

Новые проекты

Для создания новых проектов с 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, прочитайте Официальное руководство по обновлению и сопровождающее объявление .

TLDR означает, что Ecto был разбит на подпакеты, и вам необходимо указать их явно:

Удалите явную зависимость :ecto и обновите зависимости :phoenix_ecto и :ecto_sql следующими версиями:

{:ecto_sql, "~> 3.0-rc"},
{:phoenix_ecto, "~> 4.0"},
0 голосов
/ 30 октября 2018

Начиная с 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, но документация уже ссылается на это, и он также работает с mix. )

... или, как Юфренд рекомендует в своем ответе , если вы начинаете новый проект Phoenix, используйте пакеты <1.4.0. </p>


См. Серию Хосе Валима «Проникновение в Ecto 3.0» , где в первом посте объясняются принципиальные изменения в Ecto 3.0:

Разделить Ecto на ecto и ecto_sql

Ecto 3.0 будет разбит на два репозитория: ecto и ecto_sql. После Ecto 2.0 возросло число разработчиков и команд. использование Ecto для отображения и проверки данных, без необходимости база данных. Однако добавление Ecto в ваше приложение все равно принесет много багажа SQL, таких как адаптеры, песочницы и миграции, который многие считают смешанным сообщением.

В Ecto 3.0 мы переместим все адаптеры SQL в отдельный хранилище и Ecto сосредоточатся на четырех строительных блоках: схемах, changesets, запросы и репо. Вы можете увидеть обсуждение в трекер проблем.

Если вы используете Ecto с базой данных SQL, переход на Ecto 3.0 будет быть очень простым. Вместо:

{:ecto, "~> 2.2"}

Вы должны перечислить:

{:ecto_sql, "~> 3.0"}

И если вы используете Ecto только для манипулирования данными, но без доступ к базе данных, то это просто вопрос повышения его версии. Вот и все!


* * ОБНОВЛЕНИЕ тысячи сорок-девять

По какой-то причине мне также нужно было добавить {:plug_cowboy, "~> 1.0"} к зависимостям Mixfile при обновлении проекта Phoenix 1.3, и все это начало работать.

0 голосов
/ 30 октября 2018

Установка новой версии Phoenix работала на меня.

Удалить старую версию:

mix archive.uninstall phx_new

Установить новую версию:

mix archive.install hex phx_new 1.4.0-rc.2

0 голосов
/ 29 октября 2018

Есть ли у вас 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 для изучения, которая скоро будет выпущена и не имеет этой проблемы.

Сначала удалите ваш текущий локальный архив Феникса:

mix archive.uninstall phx_new

Затем, чтобы установить последнюю версию разработки , следуйте инструкциям в https://github.com/phoenixframework/phoenix/blob/master/installer/README.md

...