显然,在某些情况下,可访问的存储库链$*REPO
可能会有所不同。也就是说,在像这样的 GitHub 操作中,raku 是 Docker 镜像的一部分,存储库链突然变成:
(inst#/github/home/.raku inst#/usr/share/perl6/site inst#/usr/share/perl6/vendor inst#/usr/share/perl6/core ap# nqp# perl5#)
Run Code Online (Sandbox Code Playgroud)
第一个目录实际上并不存在;应该是这个/home/raku/.raku
。所以有几个问题
我真的不明白发生这种情况的原因是什么。初始化容器涉及一长串命令行,如下所示:
/usr/bin/docker create --name d043d929507d4885927ac95002160d52_jjmereloalpinerakugha202110_1e6e32 --label 6a6825 --workdir /__w/p6-pod-load/p6-pod-load --network github_network_da048828784a46c3b413990beeaed866 -e "HOME=/github/home" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work":"/__w" -v "/home/runner/runners/2.285.1/externals":"/__e":ro -v "/home/runner/work/_temp":"/__w/_temp" -v "/home/runner/work/_actions":"/__w/_actions" -v "/opt/hostedtoolcache":"/__t" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" --entrypoint "tail" jjmerelo/alpine-raku:gha-2021.10 "-f" "/dev/null"
Run Code Online (Sandbox Code Playgroud)
实际上,似乎有一个环境变量设置为该值。因此,可能是环境变量HOME
决定了这一点,而不是安装中发生的任何事情。但我不知道这是一个功能还是一个错误。
您需要设置RAKULIB
为库最初安装的位置,如下所示:
# Environment
ENV PATH="${WORKDIR}/.raku/bin:${WORKDIR}/.raku/share/perl6/site/bin:${PATH}" \
ENV="${WORKDIR}/.profile"\
RAKULIB="inst#/home/raku/.raku"
Run Code Online (Sandbox Code Playgroud)
这部分的文档不多,但inst#
前缀反映了它包含预编译单元的事实,并且该目录是它最初安装的位置。这样,无论在哪里HOME
,Rakudo 总会找到原来安装的模块。
我没有第二部分的答案,但我可以回答第一部分:存储库链中的第一个元素是在$HOME
每次 rakudo 启动时获取的。$HOME
如果安装时间或任何其他模块的值zef
与当前值不同(典型的例子),一种解决方法是执行类似的操作
# Environment
ENV PATH="${WORKDIR}/.raku/bin:${WORKDIR}/.raku/share/perl6/site/bin:${PATH}" \
ENV="${WORKDIR}/.profile"\
RAKULIB="inst#/home/raku/.raku"
Run Code Online (Sandbox Code Playgroud)
如果您不想以这种方式携带变量,可以创建一个 shell 函数或一个别名来执行此操作。长期解决方案,真的不知道。
归档时间: |
|
查看次数: |
172 次 |
最近记录: |