Ecto:我现在可以将 Ecto 从 2.1.6 更新到 2.2.2 吗?如何操作?
Ecto: Can I update Ecto from 2.1.6 to 2.2.2 now and how to do it?
目前我安装了 Ecto 2.1.6 和 Phoenix 1.3 框架。但我发现 Ecto 有一个版本 2.2.2,它支持变更集的 :ignore 操作类型,这允许它们被丢弃,例如,如果没有更改。我的项目需要此功能,但不幸的是我无法更新 Ecto。我尝试混合 deps.update ecto,混合 deps.unlock ecto,混合 deps.update ecto --all 等等..
那么怎么做呢?也可能这不安全?虽然在 2.2 发布页面上我看到它专门用于错误修复,所以不应该有重大更改,但谁知道呢..
编辑:
我来自 mix.exs 文件的部门:
defp deps do
[
{:phoenix, "~> 1.3.0", override: true},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.2"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{:trans, "~> 2.0"},
{:scrivener_ecto, "~> 1.0"},
{:scrivener_html, "~> 1.7"},
{:arc_ecto, "~> 0.7.0"},
{:gen_smtp, "~> 0.11"},
{:phoenix_swoosh, "~> 0.2"},
{:bodyguard, "~> 2.1"},
{:slugger, "~> 0.2"},
{:coherence, "~> 0.5"}
]
end
将依赖项更新到最新的 semver 兼容版本的常用方法是 mix deps.update
。当 运行ning mix deps.update ecto
时你没有得到 Ecto 2.2 的原因是因为你的传递依赖之一 timex_ecto
依赖于 ecto ~> 2.1.0
和 2.2.x
与 ~> 2.1.0
.
不兼容
├── coherence ~> 0.5 (Hex package)
│ ├── comeonin ~> 3.0 (Hex package)
│ │ └── elixir_make ~> 0.4 (Hex package)
│ ├── ecto ~> 2.0 (Hex package)
│ ├── gettext ~> 0.13 (Hex package)
│ ├── phoenix ~> 1.3 (Hex package)
│ ├── phoenix_html ~> 2.10 (Hex package)
│ ├── phoenix_swoosh ~> 0.2 (Hex package)
│ ├── timex ~> 3.1 (Hex package)
│ │ ├── combine ~> 0.7 (Hex package)
│ │ ├── gettext ~> 0.10 (Hex package)
│ │ └── tzdata ~> 0.1.8 or ~> 0.5 (Hex package)
│ │ └── hackney ~> 1.0 (Hex package)
│ ├── timex_ecto ~> 3.1 (Hex package)
│ │ ├── ecto ~> 2.1.0 (Hex package) <-- This
│ │ └── timex ~> 3.0 (Hex package)
│ └── uuid ~> 1.0 (Hex package)
正确的解决方法是要求 timex_ecto 的作者将依赖项更改为 ~> 2.1
。在那之前,您可以在 mix.exs
:
中覆盖 Ecto 的版本
defp deps do
[
...,
{:ecto, "~> 2.2", override: true}
]
end
然后 运行 mix deps.get
.
目前我安装了 Ecto 2.1.6 和 Phoenix 1.3 框架。但我发现 Ecto 有一个版本 2.2.2,它支持变更集的 :ignore 操作类型,这允许它们被丢弃,例如,如果没有更改。我的项目需要此功能,但不幸的是我无法更新 Ecto。我尝试混合 deps.update ecto,混合 deps.unlock ecto,混合 deps.update ecto --all 等等..
那么怎么做呢?也可能这不安全?虽然在 2.2 发布页面上我看到它专门用于错误修复,所以不应该有重大更改,但谁知道呢..
编辑: 我来自 mix.exs 文件的部门:
defp deps do
[
{:phoenix, "~> 1.3.0", override: true},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.2"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{:trans, "~> 2.0"},
{:scrivener_ecto, "~> 1.0"},
{:scrivener_html, "~> 1.7"},
{:arc_ecto, "~> 0.7.0"},
{:gen_smtp, "~> 0.11"},
{:phoenix_swoosh, "~> 0.2"},
{:bodyguard, "~> 2.1"},
{:slugger, "~> 0.2"},
{:coherence, "~> 0.5"}
]
end
将依赖项更新到最新的 semver 兼容版本的常用方法是 mix deps.update
。当 运行ning mix deps.update ecto
时你没有得到 Ecto 2.2 的原因是因为你的传递依赖之一 timex_ecto
依赖于 ecto ~> 2.1.0
和 2.2.x
与 ~> 2.1.0
.
├── coherence ~> 0.5 (Hex package)
│ ├── comeonin ~> 3.0 (Hex package)
│ │ └── elixir_make ~> 0.4 (Hex package)
│ ├── ecto ~> 2.0 (Hex package)
│ ├── gettext ~> 0.13 (Hex package)
│ ├── phoenix ~> 1.3 (Hex package)
│ ├── phoenix_html ~> 2.10 (Hex package)
│ ├── phoenix_swoosh ~> 0.2 (Hex package)
│ ├── timex ~> 3.1 (Hex package)
│ │ ├── combine ~> 0.7 (Hex package)
│ │ ├── gettext ~> 0.10 (Hex package)
│ │ └── tzdata ~> 0.1.8 or ~> 0.5 (Hex package)
│ │ └── hackney ~> 1.0 (Hex package)
│ ├── timex_ecto ~> 3.1 (Hex package)
│ │ ├── ecto ~> 2.1.0 (Hex package) <-- This
│ │ └── timex ~> 3.0 (Hex package)
│ └── uuid ~> 1.0 (Hex package)
正确的解决方法是要求 timex_ecto 的作者将依赖项更改为 ~> 2.1
。在那之前,您可以在 mix.exs
:
defp deps do
[
...,
{:ecto, "~> 2.2", override: true}
]
end
然后 运行 mix deps.get
.