Могу ли я использовать разные версии пакета для разных сред? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть проект, в котором мне нужно использовать SQLite в локальной среде, но Postgres на обычном сервере.

К сожалению, пока нет адаптера SQLite для Ecto 3, что вынудило меня сохранить Ecto и некоторые связанные пакеты на 2.x, что вызвало некоторые проблемы, такие как этот: Ошибка песочницы SQL Ecto 2.0на тестах

Интересно, можно ли было бы указать две разные версии Ecto и, следовательно, зависимости для сред :local и :prod.В настоящее время это кажется невозможным, поскольку в каждом проекте используется только один файл блокировки.Кажется, единственный способ достичь этого - хранить два разных файла блокировки в каталоге проекта?например, https://elixirforum.com/t/only-fetch-deps-compatible-for-a-specific-version-of-elixir/16213

1 Ответ

0 голосов
/ 06 февраля 2019

Я не пробовал это подробно, но, возможно, изменение файла mix.exs, как это, поможет:

defmodule YourProject.MixProject do
  use Mix.Project

  def project do
    [
      app: :your_project,
      version: "0.1.0",
      elixir: "~> 1.7",
      start_permanent: Mix.env() == :prod,
      deps: deps(Mix.env()),
      lockfile: lockfile(Mix.env())
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  defp lockfile(:local), do: "mix-local.lock"
  defp lockfile(_), do: "mix.lock"

  # Run "mix help deps" to learn about dependencies.
  defp deps(:local) do
     [{:ecto, "~> 2.0"}]
  end

  defp deps(_) do
     [{:ecto, "~> 3.0"}]
  end
end

И файл блокировки, и deps различаются для среды :local.

...