【问题标题】:Not able to deploy Terrain Counter contract to localterra无法将 Terrain Counter 合约部署到 localterra
【发布时间】:2022-07-27 01:24:24
【问题描述】:

我正在尝试部署 Terrain 的 Terra 合约:https://www.npmjs.com/package/@terra-money/terrain

为了部署计数器合约,我需要执行以下操作(我在 windows 10 上运行):

npx terrain deploy counter --signer validator

但是当我这样做时,我收到以下错误:

错误消息:docker:来自守护进程的错误响应:create $(pwd): "$(pwd)" 包括本地卷名的无效字符,仅 "[a-zA-Z0-9][a-zA- Z0-9_.-]”是允许的。如果您打算传递主机目录,请使用绝对路径。 请参阅“docker run --help”。

在网上搜索后,我发现问题是我在 windows 10 上运行,因此需要将 $pwd 替换为 %cd%。于是我进入Terrain库文件deployment.js,找到了导致这个错误的代码:

child_process_1.execSync(`docker run --rm -v "$(pwd)":/code \
        --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
        --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
        cosmwasm/rust-optimizer-arm64:0.12.5`, { stdio: "inherit" });

现在,当我删除第二行 --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ 并将 $pwd 替换为 %cd% 时,我得到以下信息:

child_process_1.execSync(`docker run --rm -v "%cd%":/code \
        --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
        cosmwasm/rust-optimizer:0.12.5`, { stdio: "inherit" });

这似乎有效,因为它触发了构建和部署。但是,我删除了第二行。如果我添加第二行并使用 %cd% 删除 $pwd,我会得到以下信息:

child_process_1.execSync(`docker run --rm -v "%cd%":/code \
        --mount type=volume,source="%(basename "%cd%")_cache%",target=/code/target \
        --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
        cosmwasm/rust-optimizer:0.12.5`, { stdio: "inherit" });

但是,这不起作用。我收到以下错误

docker:来自守护进程的错误响应:create %(basename C:\Users\user\Desktop\Apps\Terra\my-dapp\contracts\counter)_cache%: "%(basename C:\Users\user\Desktop \Apps\Terra\my-dapp\contracts\counter)cache%" 包括本地卷名的无效字符,只有 "[a-zA-Z0-9][a-zA-Z0-9.-]”是允许的。如果您打算传递主机目录,请使用绝对路径。

这个错误看起来与我在 $pwd 中遇到的类似错误,但现在“basename”是问题所在。但我不知道如何解决这个问题。谁能帮帮我?

【问题讨论】:

    标签: node.js docker smartcontracts terrain terra


    【解决方案1】:

    我找到了解决方案。对于那些处于相同情况并且不知道发生了什么以及如何解决它的人,我参考了我发布解决方案的链接:

    https://github.com/terra-money/terrain/issues/74

    【讨论】:

      【解决方案2】:

      我认为您的解决方案可能是这样的。您只需要变量$pwd 的值,带分隔符括号。

      child_process_1.execSync(`docker run --rm -v ${pwd}:/code \
          --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
          cosmwasm/rust-optimizer:0.12.5`, { stdio: "inherit" });
      

      【讨论】:

        猜你喜欢
        • 2018-07-07
        • 2021-09-23
        • 2021-03-17
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-15
        相关资源
        最近更新 更多