我可以使用不同版本的软件包为不同环境的?

问题描述 投票:1回答:1

我有一个项目,我需要使用SQLite在本地环境中,但Postgres的一个正常的服务器上。

不幸的是,对于外生3没有SQLite的适配器的是,迫使我保持​​外生和2.x一些相关的软件包,这引起了一些问题,比如这一个:Ecto 2.0 SQL Sandbox Error on tests

我不知道是否有可能指定两个不同版本的外生的,因而依赖关系的环境:local:prod。目前,它似乎是不可能的,因为每个项目只有一个锁文件。实现这一目标的唯一途径似乎是存储两个不同的lockfiles在项目目录?例如https://elixirforum.com/t/only-fetch-deps-compatible-for-a-specific-version-of-elixir/16213

package elixir package-management hex-pm
1个回答
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环境不同。

© www.soinside.com 2019 - 2024. All rights reserved.