Как работать с Phoenix Framework с Mongodb?

Я пытаюсь использовать феникс фреймворк с mongodb в качестве базы данных, поэтому я запускаю следующую команду, чтобы начать

mix phoenix.new helloworld --database mongodb

мой mix.exs файл выглядит так:

defp deps do
  [{:phoenix, "~> 1.2.1"},
   {:phoenix_pubsub, "~> 1.0"},
   {:phoenix_ecto, "~> 3.0"},
   {:mongodb_ecto, ">= 0.0.0"},
   {:phoenix_html, "~> 2.6"},
   {:phoenix_live_reload, "~> 1.0", only: :dev},
   {:gettext, "~> 0.11"},
   {:cowboy, "~> 1.0"}]
end

но когда я бегу mix deps.getЯ получаю следующую ошибку:

Failed to use "ecto" (versions 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4) because
  mongodb_ecto (versions 0.1.0 to 0.1.2) requires ~> 1.0
  phoenix_ecto (version 3.0.1) requires ~> 2.0


Failed to use "ecto" (versions 2.0.0-beta.0 to 2.0.6) because
  mongodb_ecto (versions 0.1.0 to 0.1.2) requires ~> 1.0
  phoenix_ecto (version 3.0.0) requires ~> 2.0.0-rc


Failed to use "ecto" (version 2.0.6) because
  mongodb_ecto (versions 0.1.3 to 0.1.5) requires ~> 1.0.0
  phoenix_ecto (version 3.0.0) requires ~> 2.0.0-rc


Failed to use "ecto" (versions 2.1.0 to 2.1.4) because
  mongodb_ecto (versions 0.1.0 to 0.1.2) requires ~> 1.0
  phoenix_ecto (versions 3.1.0 to 3.2.3) requires ~> 2.1


Failed to use "ecto" (version 2.1.4) because
  mongodb_ecto (versions 0.1.3 to 0.1.5) requires ~> 1.0.0
  phoenix_ecto (version 3.0.1) requires ~> 2.0


Failed to use "ecto" (version 2.1.4) because
  mongodb_ecto (versions 0.1.3 to 0.1.5) requires ~> 1.0.0
  phoenix_ecto (versions 3.1.0 to 3.2.3) requires ~> 2.1

** (Mix) Hex dependency resolution failed, relax the version requirements of your dependencies or unlock them (by using mix deps.update or mix deps.unlock). If you are unable to resolve the conflicts you can try overriding with {:dependency, "~> 1.0", override: true}

Как мне начать?

1 ответ

Решение

Проблема здесь в том, что mongodb_ecto давно не обновлялся и, следовательно, не поддерживает более новые версии Ecto (v2.0 и выше), что в настоящее время использует Phoenix. Это вызывает mix deps.get потерпеть неудачу, так как не может разрешить зависимости.

Одним из решений здесь является прямое использование драйвера MongoDB для Elixir вместо mongodb_ecto и настроить его для работы с Ecto в вашем приложении Феникс. Вот запись в блоге, которая объясняет, как вы можете это сделать:

Феникс с Экто и МонгоДБ


Есть также еще одна библиотека, которая предлагает MongoDB Поддержка для Ecto 2, но он все еще указан как beta в репозитории проекта github. Вы можете сами проверить, соответствует ли оно вашим критериям использования:

https://github.com/eyrmedical/mongo_ecto

Другие вопросы по тегам