【问题标题】:Ecto: Can I update Ecto from 2.1.6 to 2.2.2 now and how to do it?Ecto:我现在可以将 Ecto 从 2.1.6 更新到 2.2.2 吗?该怎么做?
【发布时间】:2017-09-10 15:52:43
【问题描述】:

目前我已经安装了带有 Phoenix 1.3 框架的 Ecto 2.1.6。但是我发现 Ecto 有一个 2.2.2 版本,它支持 :ignore 变更集的操作类型,例如,如果没有更改,则可以丢弃它们。我的项目需要此功能,但不幸的是我无法更新 Ecto。我尝试混合 deps.update ecto、mix deps.unlock ecto、mix 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

【问题讨论】:

  • mix deps.update ecto 在我的 Phoenix 1.2 项目中将 ecto 从 2.1 升级到 2.2.2。你能从你的mix.exs 文件中发布依赖列表吗?
  • @Dogbert : 我编辑了主题,请查看我的部门列表。

标签: elixir ecto


【解决方案1】:

将依赖项更新到其最新的 semver 兼容版本的常用方法是mix deps.update。运行 mix deps.update ecto 时您没有获得 Ecto 2.2 的原因是您的传递依赖项之一 timex_ecto 依赖于 ecto ~> 2.1.02.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 的作者将依赖项更改为 ~&gt; 2.1。在此之前,您可以在 mix.exs 中覆盖 Ecto 的版本:

defp deps do
  [
    ...,
    {:ecto, "~> 2.2", override: true}
  ]
end

然后运行mix deps.get

【讨论】:

  • 非常感谢,Dogbert!
猜你喜欢
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多