我有一个项目,需要在本地环境中使用SQLite,但需要在普通服务器上使用Postgres。
不幸的是,目前还没有适用于Ecto 3的SQLite适配器,这迫使我将Ecto和一些相关软件包保留在2.x
上,这引起了诸如以下问题:Ecto 2.0 SQL Sandbox Error on tests
我想知道是否可以指定两种不同版本的Ecto,从而指定环境:local
和:prod
的依赖性。当前似乎是不可能的,因为每个项目只有一个锁文件。实现它的唯一方法似乎是在项目目录中存储两个不同的锁文件?例如https://elixirforum.com/t/only-fetch-deps-compatible-for-a-specific-version-of-elixir/16213
答案 0 :(得分: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
在:local
环境中,锁文件和deps都不同。