问题标签 [distillery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
deployment - 如何在 phoenix 中运行可执行版本构建?
我们正在使用 distillery 在我们的 phoenix 应用程序中创建一个可执行的构建版本。我们正在使用 docker 在 Digital Ocean 上部署我们的应用程序。由于我们不想与另一台机器共享代码,我们希望将构建编译文件作为可执行文件执行,我们可以通过命令行在某个远程机器上运行它。
因此,经过一些研究,我们发现distillery 插件构建可执行版本,它使用
我们能够创建发布。它提供了三个命令来运行这些
运行前台命令后出现以下错误
你能帮我解决这个错误吗?
我也很高兴听到是否有人有更好的方法来创建可执行的发布文件。我可以在任何基于 Linux 的系统中使用它来部署,而无需使用 Docker 公开我的源代码。
如果我需要提供更多信息或做任何有问题的修改,请告诉我。谢谢
elixir - Edeliver/Distillery 因“bash: line 10: mix: command not found”错误而失败?
运行时出现此错误mix edeliver build release production --verbose
但是当我登录服务器时,Elixir(以及 Mix)似乎安装得很好。
它似乎工作正常。Edeliver 找不到我的 Elixir 安装有什么问题?我使用 asdf 版本管理器来安装 Elixir 和 Erlang。
elixir - 在酿酒厂使用失忆症
是否可以将失忆症与酿酒厂一起使用。因为在 distillery 版本中无法使用 mix,所以我不确定如何创建 mnesia db。
elixir - 使用 Docker Distillery 版本运行迁移
我正在尝试部署我的 Phoenix 1.3 应用程序。我已经设置了mix docker
发布版本。现在我正在弄清楚如何运行迁移。
我决定采用制作自定义发布命令的方法。我创建了这样的 MigrationTask:
它在技术上应该运行,因为我从 Distillery Repo 复制了它,但事实并非如此。
我收到这样的错误:
windows - 在 Windows 上的 Elixir-Distillery-Release 中自动运行迁移 pre_start
我需要你的帮助!我试图在应用程序自动启动之前(通过 Boot Hooks - https://hexdocs.pm/distillery/boot-hooks.html#content)在酒厂版本(Elixir-Application)中运行迁移。开发和生产平台必须是 Windows。
问题:我找不到任何有关 Windows (.bat) 的信息 - 引用该问题的脚本 - 我搜索“pre_start.bat”文件的脚本 - 用于调用 ERTS 节点,最后是我的 Elixir 代码。
我的酒厂配置:rel\config.exs
所需的脚本应该调用我的代码“Elixir.MyApp.ReleaseTask.migrate”-Function 我怎样才能实现这个?
以下代码是我到目前为止所得到的..但它不起作用..
当我对此完全错误时,请纠正我。任何帮助表示赞赏!顺便说一句,它是一个凤凰应用程序。
environment-variables - 如何使用 Distillery 库在 Phoenix 中设置环境变量?
按照本指南Distillery
发布一个 elixir/phoenix 项目:
在设定的config/prod.exs
步骤,作者写道:
配置数据库。这里使用${DB_HOSTNAME}
type 来获取环境变量,但不是System.get_env("DB_HOSTNAME")
.
但是,当我在MIX_ENV=prod mix release --env=prod
本地运行和设置环境变量时:
它循环:
长生不老药/凤凰似乎${DB_HOSTNAME}
不知道。
我现在正在使用 Elixir 1.5.2 和 Phoenix 1.3。版本问题?
elixir - Elixir:应用程序立即退出,或者在运行 distillery 包时没有收到输入。为什么它会以这种方式工作,以及如何解决它?
我有一个 Elixir 应用程序,其结构如下:
应用程序模块相当简单,它有一个use Application
和一个
主管有点复杂:
wherehalt_exit(pid)
执行 aProcess.sleep(100)
然后在每次发现进程 pid 仍然存在时调用自身(或者在 pid 不再存在时简单地返回 nil),并wait_for_child
找到 Worker 模块的 pid(考虑到它可能必须等到它启动) .
IO.puts
我的 Worker 模块使用和与用户交互IO.gets
。为什么所有这些复杂的不必要的逻辑?看起来
- 当使用 mix run 并省略停止退出时,应用程序立即死亡
- 当使用 mix release (distillery) 并
myapp.bat console
从 cmd 运行并省略停止退出时,我的应用程序启动,立即死亡,然后 iex 启动 - 当使用带有
myapp.bat console
停止退出的混合版本时,我的应用程序输出正确,但无法接收任何输入(我的意思是我无法在 werl.exe 的窗口中输入) - 使用 mix release w/ 时
myapp.bat foreground
,我的应用程序启动,然后批处理文件中出现错误(系统找不到文件 `%get_pid_cmd%`。错误:无法识别搜索过滤器。无法识别 '@call'作为内部或外部命令、可运行程序或批处理文件。)此时我的应用程序终止。 - 当使用 mix run --no-halt (应用程序内没有退出暂停逻辑)时,我的应用程序启动,立即终止,并且 erlang VM 仍然在 cmd 窗口中运行
- 只有当我混合运行和包含时
halt_exit/1
,我的应用程序才能按预期工作
综上所述,我得出的结论是 1)当我的应用程序模块start/2
返回时,应用程序就关闭了,这没有多大意义,因为 Elixir 是为那些将负载放在其他进程而不是在应用程序的 main之外的应用程序而设计的模块。2)输入是通过主应用程序模块的进程完成的(但由于某种原因,仅在单独的 werl.exe 窗口中运行时,似乎可以正常运行混合运行),所以我不能放置任何阻塞直到工作完成如果我想要我的用户输入,那里有逻辑。
我该如何解决这个问题,同样重要的是(这样我可以避免将来出现问题)是什么行为导致了我的问题?我需要能够在没有安装 mix 和 Erlang VM 的计算机上运行它,所以我唯一的选择是让它与生成的 distillery 包一起工作,目前我不能。
没有多少谷歌搜索导致我采取类似的策略来人为地停止退出,而且我发现没有论坛/教程提到这个“提前退出”的问题,所以我想解决这个问题的正确方法是以某种方式让它不想要在任何进程运行时退出。
elixir - 模块在发行版中不可用
我有一个小的 Elixir 应用程序,它使用feeder_ex来解析 XML。在开发中一切正常,但是当我用distillery构建我的版本时,我开始收到unavailable xmerl module
错误。
我通过将xmerl
应用程序添加到我的 mix.exs 下的应用程序列表来解决它。但这对我来说没有意义,因为我已经有了feeder_ex
我的应用程序列表。并且feeder_ex
必须feeder
对他的申请清单有xmerl
对他的申请清单。
那么为什么我必须在我自己的应用程序列表中再声明一次呢?
更新 - 添加 Erlang 版本/命令结果
xmerl =>
错误 =>
更新 - 添加 Linux 版本,vm.args
我使用 ubuntu 16.04 和 distillery 1.5.2。这是我的vm.args
文件:
更新 - 添加应用程序列表
elixir - Elixir/Distillery:远程 IP 地址在已部署的应用程序中不准确
为了测试,我有一个简单的控制器来检查客户端的远程 IP 地址:
在我的生产环境中使用 进行测试时phx.server
,conn.remote_ip
包含预期的客户端 IP 地址,格式如下:
在运行使用 Distillery 打包的二进制文件时,conn.remote_ip
会返回类似这样的内容,即使对于具有不同 IP 地址的多个远程客户端,它每次都会返回相同的内容:
我的应用程序没有坐在反向代理后面,那么还有什么可能导致这种情况发生?
environment-variables - 酿酒厂不替换环境变量
在我使用酒厂进行发布的伞式项目中,我有一个具有以下内容的db
应用程序config
:
正如我REPLACE_OS_VARS=true
在构建中设置的那样,正确读取环境变量会配置数据库。
app
我在具有以下配置的电子邮件中进行了类似的设置:
然后我希望从我的email
应用程序内部访问它,如下所示:
但是 的值@from_email
不是"${FROM_EMAIL}"
我设置的环境变量FROM_EMAIL
。
我不太熟悉酿酒厂的工作原理,也不确定以这些类似方式传入这些环境变量是如何导致读取方式不同的。
关于为什么会发生这种情况的洞察力将不胜感激。
编辑:
我们可以$FROM_EMAIL
在 distillery 编译时传递环境变量,但我们希望在运行时传递它。我们可以在db
应用程序中执行此操作,但email
由于某种原因不能在应用程序中执行此操作。