簡體   English   中英

我可以為不同的環境使用不同版本的包嗎?

[英]Can I use different versions of a package for different environments?

我有一個項目,我需要在本地環境中使用 SQLite,但在普通服務器上使用 Postgres。

不幸的是,目前還沒有用於 Ecto 3 的 SQLite 適配器,迫使我將 Ecto 和一些相關包保留在2.x ,這導致了一些問題,例如: Ecto 2.0 SQL Sandbox Error on testing

我想知道是否可以指定兩個不同版本的 Ecto 以及環境的依賴關系:local:prod 目前這似乎是不可能的,因為每個項目只有一個鎖文件。 實現它的唯一方法似乎是在項目目錄中存儲兩個不同的鎖文件? 例如https://elixirforum.com/t/only-fetch-deps-compatible-for-a-specific-version-of-elixir/16213

我還沒有深入嘗試過,但也許像這樣更改 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環境的 lockfile 和 deps 是不同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM