为什么 Elixir `mix` 要求我安装末尾带有 `.ez` 的相同版本的 `hex`?

问题描述 投票:0回答:1

主要问题

我是 Elixir 的新手,所以我不知道如何回答这个问题

mix local.hex
:

$ mix local.hex
Found existing entry: /home/civfan/.asdf/installs/elixir/1.17.2-otp-27/.mix/archives/hex-2.1.1
Are you sure you want to replace it with "https://builds.hex.pm/installs/1.16.0/hex-2.1.1.ez"? [Yn]

我很困惑——为什么要求安装

hex-2.1.1.ez
而不是
hex-2.1.1
?有关系吗?

抓握

我认为这与我的环境有关,而不是复制原始教程的环境。

昨天,我按照标准的Elixir安装指南,并使用

asdf
方法成功安装了ElixirErlang。然后我按照Phoenix框架指南成功构建并运行了我的第一个项目。

今天,我回来打开了一个新终端,我正在遵循 Elixir 的另一个项目指南。快开始时,它说要跑

mix local.hex
。啊哈!我记得 Mix,与 Python 中的
pip
非常接近,还有一些关于 Hex 的东西,尽管我不清楚最接近的等价物。所以我有信心它应该可以工作,但后来我得到了上面的问题。也许它仍然有效,但我想无论如何我都会伸出援手,所以我确保我有一个良好的基础。

我确实把这个放在我的

.bashrc
中:

 . "$HOME/.asdf/asdf.sh"
 . "$HOME/.asdf/completions/asdf.bash"

我可以运行

erl
elixir
mix
就好了。

在此之前,我在那里设置了 IntelliJ 和 Elixir 插件,并将其指向我已经通过

asdf
安装的现有 Elixir 和 Erlang SDK,所以我认为它没有进行任何更改。目前的问题与 IntelliJ 无关,只是命令行。

elixir phoenix-framework
1个回答
0
投票

如果你阅读这两个文件路径,你可以看到它们使用的是不同的 Elixir 版本。

1.17.2-otp-27

1.16.0

我无法准确说出您的环境中发生的情况,但这里有一些针对

asdf
的建议,这些建议始终相关。

asdf
很像
pyenv
,其中您有“全局”和“本地”版本。

global
版本是“全局”设置的,并且是默认/后备版本。

您可以这样设置:

asdf global elixir 1.17.2-otp-27
asdf global erlang 27.0

现在当你跑步时,例如

iex
,它将使用这些版本。

要设置本地版本,首先要意识到这些版本保存在您当前的目录中

所以做这样的事情:

cd ~/my-github-projects/cool-new-project
# now you are in your project directory
asdf local elixir 1.16.0
asdf local erlang 26.0

或者您想要该项目的任何版本。

这些

asdf local
命令将创建或附加到名为:

的文件
.tool-versions

此“工具版本”文件是

asdf
将自动读取的内容。如果您位于子目录中,则 asdf 将检查该文件的父目录。如果在父目录中没有找到它,那么它将检查父目录的父目录。它将在目录中不断向上移动,直到位于您的主目录中,然后它将恢复为全局版本。

所以主要问题是看看你的项目目录下是否有

.tool-versions
文件,像这样:

ls -lah

如果需要,您甚至可以手动编辑此

.tool-versions
文件。

请注意,它可能包含许多其他内容的版本。

如果您下载/克隆了包含

.tool-versions
文件的新项目,那么您只需运行即可安装所有内容:

asdf install

您可以使用

asdf
安装许多其他工具,例如
postgres
nodejs

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.