我们正尝试将edeliverPhoenix Web应用程序的"热升级"部署到远程虚拟机实例.
我们的目标是每次都构建应用程序的"升级"版本,以便应用程序可以在生产中"热"升级而无需任何停机时间.
我们成功地在"Hello World"凤凰应用程序上进行了"热升级":https: //github.com/nelsonic/hello_world_edeliver,当构建通过时,它会自动从Travis-CI部署.请参阅:https://travis-ci.org/nelsonic/hello_world_edeliver/builds/259965752#L1752
因此,理论上这种技术应该适用于我们的"真实"应用程序.
执行以下命令(构建升级):
mix edeliver build upgrade --auto-version=git-revision --from=$(git rev-parse HEAD~) --to=$(git rev-parse HEAD) --verbose
Run Code Online (Sandbox Code Playgroud)
即"构建从以前的git版本到当前版本的升级"
到现在为止还挺好." 发布成功! "

vm.args: No such file or directory当我们尝试部署升级时:
mix edeliver deploy upgrade to production --version=1.0.3+86d55eb --verbose
Run Code Online (Sandbox Code Playgroud)

cat: /home/hladmin/healthlocker/releases/1.0.3+86d55eb/vm.args: No such file or directory
Run Code Online (Sandbox Code Playgroud)
注意:我们有一个小的bash脚本,它读取可用的最新升级版本
.deliver/releases并进行部署,看看:version.sh
有没有办法忽略vm.args文件的缺失并继续部署?
或者,如果需要文件来完成部署,是否有一些关于如何创建文件的文档? …
(模式CodeReloader中dev)正在使用Mix.Config. 使用 distillery 版本时会失败,dev_mode因为mix在版本中不可用。
是否可以CodeReloader在 Phoenix 应用程序中完全禁用,以便我的应用程序不会在dev_mode发布时无法启动?
运行时出现此错误 mix edeliver build release production --verbose
A remote command failed on:
deploy@80.111.111.80
Run Code Online (Sandbox Code Playgroud)
但是当我登录服务器时,Elixir(以及 Mix)似乎安装得很好。
ssh deploy@80.111.111.80
deploy@80.111.111.80:~$ mix -v
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Mix 1.5.0
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常。Edeliver 在查找 Elixir 安装时遇到问题是什么?我使用 asdf 版本管理器安装 Elixir 和 Erlang。
我的应用程序在尝试运行版本时遇到了这个致命问题:
** (MatchError) no match of right hand side value: {:error, {:inets, {'no such file or directory', 'inets.app'}}}
Run Code Online (Sandbox Code Playgroud)
在我的本地主机上运行它时它工作正常mix,但是 distillery 2 版本有这个问题。
我erlang-inets从 erlang 解决方案存储库安装了 ubuntu 软件包并做了另一个mix release,但这似乎没有解决它。
我缺少什么?
我有Phoenix应用程序(我使用--api标志创建了它),其中包含一些处理我存储在中的请求所需的其他数据priv/data/filters.csv。
因此,它在dev模式下可以正常工作,我可以像这样读取该文件:File.stream!("priv/data/filters.csv"),但是使用mix edeliver update该文件交付应用后,将无法再访问它。
我可以在构建目录中看到该文件夹,但是在交付应用程序之后,没有该文件夹priv。我不确定为什么不将其复制到传递文件夹中。
我做错了什么?交付过程后是否需要复制这些文件?在哪里可以存储必须以生产方式使用的文件?