使用酒厂部署单个文件?
Deploy with single file using distillery?
背景
我现在需要部署一个 OTP 应用程序。为了实现这一目标,我正在使用酿酒厂。我的objective是把一个自给自足的文件传给PROD机器,里面什么都有,不需要提取。
常规路线
大多数使用酿酒厂的人都会知道通常的路线:
- 运行
MIX_ENV=prod mix release
- 将
build/prod/rel/<name>/releases/<version>/<name>.tar.gz
中的 tarball 复制到部署服务器
- 提取 tarbal
- 运行代码。
Objective
我的 objective 是去掉第 3 步。我不想提取任何东西,我只想复制版本和 运行 它,就像一个 sudo 可执行文件。
–可执行
根据documentation也可以运行MIX_ENV=prod mix release --executable
或MIX_ENV=prod mix release --transient
。这将创建一个不需要提取的伪可执行文件。
问题
但是,在 运行 执行 MIX_ENV=prod mix release --executable
命令后,我通常会搜索文件 build/prod/rel/<name>/releases/<version>/<name>.run
。理论上这应该是我需要复制到我的部署服务器中的文件,但我在任何地方都找不到它。
- 我需要将哪个文件复制到部署服务器中,它在哪里?
尝试仔细检查您在做什么。作为参考,我刚刚试过了,效果很好。我使用的是 Elixir 1.7.4 和 distillery 2.0.12。
这是我所做的:
创建一个新项目:
mix new test_executable --sup
已将酿酒厂添加到 mix.exs
、
运行
mix release.init
运行:
env MIX_ENV=prod mix release --executable
得到这个输出:
==> Assembling release..
==> Building release test_executable:0.1.0 using environment prod
==> Including ERTS 10.2 from /usr/local/Cellar/erlang/21.2/lib/erlang/erts-10.2
==> Packaging release..
Release successfully built!
To start the release you have built, you can use one of the following tasks:
# start a shell, like 'iex -S mix'
> _build/prod/rel/test_executable/bin/test_executable.run console
# start in the foreground, like 'mix run --no-halt'
> _build/prod/rel/test_executable/bin/test_executable.run foreground
# start in the background, must be stopped with the 'stop' command
> _build/prod/rel/test_executable/bin/test_executable.run start
If you started a release elsewhere, and wish to connect to it:
# connects a local shell to the running node
> _build/prod/rel/test_executable/bin/test_executable.run remote_console
# connects directly to the running node's console
> _build/prod/rel/test_executable/bin/test_executable.run attach
For a complete listing of commands and their use:
> _build/prod/rel/test_executable/bin/test_executable.run help
我现在可以将文件复制到别处并运行它:
cp _build/prod/rel/test_executable/bin/test_executable.run /tmp
cd /tmp
./test_executable.run console
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe] [dtrace]
Interactive Elixir (1.7.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(test_executable@127.0.0.1)1>
背景
我现在需要部署一个 OTP 应用程序。为了实现这一目标,我正在使用酿酒厂。我的objective是把一个自给自足的文件传给PROD机器,里面什么都有,不需要提取。
常规路线
大多数使用酿酒厂的人都会知道通常的路线:
- 运行
MIX_ENV=prod mix release
- 将
build/prod/rel/<name>/releases/<version>/<name>.tar.gz
中的 tarball 复制到部署服务器 - 提取 tarbal
- 运行代码。
Objective
我的 objective 是去掉第 3 步。我不想提取任何东西,我只想复制版本和 运行 它,就像一个 sudo 可执行文件。
–可执行
根据documentation也可以运行MIX_ENV=prod mix release --executable
或MIX_ENV=prod mix release --transient
。这将创建一个不需要提取的伪可执行文件。
问题
但是,在 运行 执行 MIX_ENV=prod mix release --executable
命令后,我通常会搜索文件 build/prod/rel/<name>/releases/<version>/<name>.run
。理论上这应该是我需要复制到我的部署服务器中的文件,但我在任何地方都找不到它。
- 我需要将哪个文件复制到部署服务器中,它在哪里?
尝试仔细检查您在做什么。作为参考,我刚刚试过了,效果很好。我使用的是 Elixir 1.7.4 和 distillery 2.0.12。
这是我所做的:
创建一个新项目:
mix new test_executable --sup
已将酿酒厂添加到
mix.exs
、运行
mix release.init
运行:
env MIX_ENV=prod mix release --executable
得到这个输出:
==> Assembling release.. ==> Building release test_executable:0.1.0 using environment prod ==> Including ERTS 10.2 from /usr/local/Cellar/erlang/21.2/lib/erlang/erts-10.2 ==> Packaging release.. Release successfully built! To start the release you have built, you can use one of the following tasks: # start a shell, like 'iex -S mix' > _build/prod/rel/test_executable/bin/test_executable.run console # start in the foreground, like 'mix run --no-halt' > _build/prod/rel/test_executable/bin/test_executable.run foreground # start in the background, must be stopped with the 'stop' command > _build/prod/rel/test_executable/bin/test_executable.run start If you started a release elsewhere, and wish to connect to it: # connects a local shell to the running node > _build/prod/rel/test_executable/bin/test_executable.run remote_console # connects directly to the running node's console > _build/prod/rel/test_executable/bin/test_executable.run attach For a complete listing of commands and their use: > _build/prod/rel/test_executable/bin/test_executable.run help
我现在可以将文件复制到别处并运行它:
cp _build/prod/rel/test_executable/bin/test_executable.run /tmp cd /tmp ./test_executable.run console Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe] [dtrace] Interactive Elixir (1.7.4) - press Ctrl+C to exit (type h() ENTER for help) iex(test_executable@127.0.0.1)1>