【问题标题】:ERROR: Dependency dir /riak/riak_ensemble_demo/deps/cuttlefish/deps/neotoma ; version_mismatch错误:依赖目录 /riak/riak_ensemble_demo/deps/cuttlefish/deps/neotoma ;版本不匹配
【发布时间】:2016-07-10 04:20:00
【问题描述】:

我的目标是获取所有依赖项并在我的本地计算机上运行 riak_ensemble。但是,当我运行 rebar get-deps 时,我总是遇到:

Cloning into 'neotoma'... ERROR: Dependency dir /home/project/riak/riak_ensemble_demo/deps/cuttlefish/deps/neotoma failed application validation with reason: {version_mismatch,{"/home/agung/project/riak/riak_ensemble_demo/deps/cuttlefish/deps/neotoma/src/neotoma.app.src",
                   {expected,"1.7.3"},
                   {has,"1.7.2-9-g2f2b8e6"}}}.

错误指向一个新版本的neotoma。问题是 neotoma 在其存储库中有该版本。这是存储库的屏幕截图:

这是我用于墨鱼的 rebar.config 文件

{require_otp_vsn, "R16|17|18"}.

{erl_opts, [warnings_as_errors, {parse_transform, lager_transform}, debug_info, warn_untyped_record]}.

{eunit_opts, [verbose]}.
{cover_enabled, true}.

{escript_emu_args, "%%! -escript main cuttlefish_escript -smp disable +A 0\n"}.
{escript_incl_apps, [goldrush, getopt, lager]}.

{xref_checks, []}.
{xref_queries, [{"(XC - UC) || (XU - X - B - \"(rebar.*|mustache)\" : Mod)", []}]}.

{deps, [
    {getopt, ".*", {git, "git://github.com/jcomellas/getopt.git", {tag, "v0.8.2"}}},
    {lager, "(2.0|2.1|2.2).*", {git, "git://github.com/basho/lager.git", {tag, "2.2.0"}}},
    {neotoma, "1.7.3", {git, "git://github.com/seancribbs/neotoma.git", {tag, "1.7.3"}}}
  ]}.

{post_hooks, [
    {"-win32", compile, "rebar escriptize"},
    {"^((?!-win32).)*$", compile, "./rebar escriptize"}
  ]}.

[更新] 这是我的 riak_ensemble_demo 的 rebar.config

{erl_opts, [debug_info,
            warnings_as_errors,
            {parse_transform, lager_transform}]}.

{deps, [{lager, "2.0.3", {git, "git://github.com/basho/lager.git", {tag, "2.0.3"}}},
        {riak_ensemble, ".*", {git, "git://github.com/basho/riak_ensemble", {branch,"develop"}}}]}.

然后我运行 rebar get-deps 来满足所有需要的依赖项。

如何实现这种依赖关系?谢谢!

【问题讨论】:

  • 据我所知,它是“墨鱼”的 rebar.config。您能否向我们展示 /home/project/riak/riak_ensemble_demo 中的 rebar.config 并告诉我们您如何构建您的应用程序?
  • 嗨@P_A,我已经更新了问题。

标签: erlang riak rebar


【解决方案1】:

所以基本上每个项目都有自己的rebar.config 文件,其中指定了自己的依赖项。在这种情况下,看起来一个应用程序需要与另一个不同版本的neotoma。处理此类问题的最简单方法是将存储库“分叉”(Github 功能)到您的帐户并更正所需的依赖项。然后,您将更新您的应用程序以从您的存储库副本而不是所有者的副本中获取该应用程序。解决问题后,您可以向原始存储库的所有者发送拉取请求(另一个 Github 功能),以便他们将您的更改合并到他们的代码中。

您可能不想“分叉”所有存储库,只需要修复此问题所需的那些。转到desp 文件夹并检查所有rebar.config 文件:

cd ~/myproject/deps
find . -name rebar.config -exec grep -Hw neotoma \{\} \;

这会为您提供需要neotoma 的应用程序列表以及需要它们的版本。这些应用程序可能需要“分叉”和更正。

【讨论】:

  • 如果预期版本已经存在,我该如何更正依赖关系?我在屏幕截图中添加了它所需的依赖项。我注意到它已经在标签 1.7.3 中。
  • 在这种情况下,版本是由 git 自动创建的,请参阅 github.com/seancribbs/neotoma/blob/1.7.3/src/neotoma.app.src 中的 {vsn, git} 和 git 生成 1.7.2-9-g2f2b8e6(这很愚蠢,不是吗?:) 有更好的工具,我我确定。但是,无论如何,将vsn 更正为正确的版本,就像在这里:github.com/yoonka/builderl/blob/master/src/builderl.app.src 而且,你是从标签克隆,而不是分支。进行此更改后,需要从分支克隆依赖项,或者您需要为更改创建一个新标签。
  • 或者只是使用生成的版本1.7.2-9-g2f2b8e6而不是1.7.3在适当的rebar.config文件中包含该依赖项。
  • 更改 rebar.config 对我来说更简单而且有效!无论如何,我找不到1.7.2-9-g2f2b8e6。怎么看git生成呢?
  • 查看我之前的评论(有两个 cmets)。它在app.src 文件中,{vsn, git} 位。应该是{vsn, "1.7.3"} 来设置特定版本而不是自动生成。
猜你喜欢
  • 2016-03-17
  • 2019-07-31
  • 2022-01-22
  • 2019-11-20
  • 2023-01-15
  • 2021-11-28
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
相关资源
最近更新 更多