我正在创建一个简单的 Phoenix 伞应用程序以在客户端的 Windows 11 计算机上运行,我的目标是拥有类似
.exe
文件的文件来运行所述应用程序。
我正在创建应用程序并使用 Elixir 的正常发布程序发布它,使用以下命令:
mix phx.new demo --umbrella --no-ecto --no-dashboard --no-gettext --no-mailer
cd demo_umbrella
mix deps.get
# set MIX_ENV=prod before doing this last step!
mix release demo
对于那些好奇的人,这是我在
releases
中使用的 mix.exs
函数:
defp releases,
do: [
demo: [
applications: [
demo_web: :permanent,
runtime_tools: :permanent
],
include_executables_for: [:windows]
]
]
现在,这个基本设置将创建一个
.bat
文件: _build\prod\rel\demo\bin\demo.bat
,我可以通过以下命令启动和停止: _build\prod\rel\demo\bin\demo {start | stop}
。
懂得编程的用户只需在 Windows 中打开一个终端,输入
_build\prod\rel\demo\bin\demo start
,应用程序就会启动(可通过 localhost:4000 访问)。
但用户通常没有这样的知识。所以我想要尽可能接近
.exe
文件的东西。
我尝试过使用烤盘:
及其精神继承者,墨西哥卷饼:
不幸的是,两者都无法在 Windows 11 上运行。这促使我尝试快捷方式。 在这里,我创建了
demo.bat
的 Windows 快捷方式,并在目标路径中指定命令:
在这种情况下将是
%windir%\system32\cmd.exe /c start "" "%CD%\demo.bat" start
现在一切都很好,但是有一个问题:
所以这给我留下了以下问题:
demo.bat
是否包含运行应用程序所需的erlang VM和elixir版本?或者我需要将它们安装在客户端的计算机上吗?发布版是一个独立的目录,其中包含应用程序代码、其所有依赖项以及整个 Erlang 虚拟机 (VM) 和运行时。组装版本后,只要目标在与组装版本的计算机相同的操作系统 (OS) 发行版和版本上运行,就可以将其打包并部署到目标。
,但是如果这个bat文件不包含所有内容,我该如何解决这个问题?
1.) 防止控制台显示:https://superuser.com/questions/140047/how-to-run-a-batch-file-without-launching-a-command-window
还有这个:
https://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way
2.) 不,我认为不会。我认为您需要在目标计算机上安装 Erlang VM。我是根据这里的一点经验(尽管自从我尝试在别人的 Windows 机器上部署 Elixir 应用程序以来已经有很多年了)。
3.) 请记住,大多数有关部署 Elixir 应用程序的建议并不适用于 Windows 上的 Elixir。我曾经尝试帮助@bitwalker 在 Windows 上发布版本,但我们两个人始终无法找到令人满意的方法。
如果有某种方法可以在 WSL 下运行应用程序,那么可能会消除一些困难。
4.) 我知道您没有问,但在 Windows 11 机器上启动 Phoenix 服务器可能需要您使用 Windows 服务。这也不是一件小事。