Могу ли я использовать разные версии пакета для разных сред?
У меня есть проект, где мне нужно использовать SQLite в локальной среде, но Postgres на обычном сервере.
К сожалению, пока нет адаптера SQLite для Ecto 3, что заставляет меня держать Ecto и некоторые связанные пакеты на 2.x
, которая вызвала некоторые проблемы, такие как эта: Ecto 2.0 SQL Sandbox Error на тестах
Интересно, можно ли было бы указать две разные версии Ecto и, следовательно, зависимости для среды :local
а также :prod
, В настоящее время это кажется невозможным, поскольку в каждом проекте используется только один файл блокировки. Кажется, единственный способ достичь этого - хранить два разных файла блокировки в каталоге проекта? например, https://elixirforum.com/t/only-fetch-deps-compatible-for-a-specific-version-of-elixir/16213
1 ответ
Я не пробовал это глубоко, но, возможно, изменение файла 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
среда.