【问题标题】:How to correctly deploy Elixir/Phoenix program to Windows?如何将 Elixir/Phoenix 程序正确部署到 Windows?
【发布时间】:2023-03-29 19:53:01
【问题描述】:

我正在寻找有关如何在 Windows 上部署和运行 elixir/phoenix 程序的建议。

我使用过 Distillery,但它与 mix release 一起使用,但没有可用于命令提示符的命令。每个建议的命令,例如

_build/dev.../<program> console

产生错误not a recognized internal or external command。

我也使用过exrm,但是,即使在修改.bat 文件以删除路径中不需要的// 之后,它也会在erlang 转储文件中产生kernel PID terminated 错误。

版本:

  • 灵药:1.4.2
  • 二郎:19.2 [erts-8.2]
  • Exrm: 1.0.3

.bat 的编辑是:

<app>/rel/<app>/releases/version/app.bat and 
<app>/rel/<app>/bin/app.bat 

这是因为它试图执行:

<app>/rel/<app>/releases//app.bat 

而不是上面的。 (修复在这里找到)

这有效,程序执行但抛出错误:

kernel PID Terminated (application controller) failed to start child 'elixir.helloworld.endpoint'

感谢到目前为止的帮助,很抱歉,这是我第一次做这部分。

注意:带有exrm 程序的Windows 10 使用mix phoenix.server 可以正常运行

有没有人一步一步让一个 elixir 程序或服务在 Windows 上启动?


编辑:在mix release期间收到警告:

variable deps does not exist and is being expanded to deps()

在尝试开始的过程中:

failed to open file <app>/rel/<app>releases/version/conform

已编辑&lt;app&gt;/rel/&lt;app&gt;/bin/app.bat:

将"" 添加到%start_erl%

@set start_erl=%release_root_dir%\releases\start_erl.data
@for /f "delims=" %%i in ('type "%start_erl%"') do 
@(set start_erl_data=%%i)

编辑&lt;app&gt;/rel/&lt;app&gt;/releases/version/app.bat:

将"" 添加到%start_erl%

:: Discover the release root directory from the directory of this script
@set script_dir=%~dp0
@for %%A in ("%script_dir%\..\..") do @(set release_root_dir=%%~fA)
@set start_erl=%release_root_dir%\releases\start_erl.data
@for /f "delims=" %%i in ('type "%start_erl%"') do 
@(set start_erl_data=%%i)

将"" 添加到%werl%

:: Start a console
:console
@call :generate_config
@start "%rel_name% console" "%werl%" -config "%sys_config%" ^
-boot "%boot_script%" -boot_var ERTS_LIB_DIR "%erts_dir%"/lib ^
-env ERL_LIBS "%release_root_dir%"/lib ^
-pa "%release_root_dir%"/lib "%release_root_dir%"/lib/consolidated ^
-args_file "%vm_args%" ^
-user Elixir.IEx.CLI -extra --no-halt +iex

【问题讨论】:

  • 目前 Windows 不支持 Distillery。我们正在努力。您在 Exrm 中编辑了哪些 .bat 文件以及您是如何编辑它们的?我根本不记得那些批处理文件中有任何“不需要的//”,所以我不知道你的意思。我们需要确切的细节来解决这个问题。如果你有 Erlang,Exrm 应该可以工作,并且 Elixir 是不包含空格的路径。
  • 这里的答案:stackoverflow.com/questions/30687781/… 涵盖了如何启动 Elixir 应用程序,它应该可以在 Windows 以及任何其他受支持的操作系统上运行。
  • 感谢您的回复;
  • 您可能希望将这些详细信息添加到上述问题中。
  • 尝试从命令提示符iex --werl 运行此命令,如果没有出现 werl shell,那就是您的问题。这只是对可能发生的事情的猜测。

标签: windows elixir exrm


【解决方案1】:

还有一些建议:

  1. 尝试最新版本的 EXRM(它是 1.08,而您已经获得了 1.03)。顺便说一句,请仔细检查您的 EXRM 版本,因为如果它实际上不是 1.08 并且您误读了它,我会有点惊讶。
  2. 创建一个小/简单的应用程序并尝试使用 未修改 的控制台 批处理文件。
  3. 卸载 Erlang 并将其安装到没有 空格(例如 c:\usr\bin\erlang)。是的,我知道这不是标准 Windows 但带有空格的目录名称似乎总是会导致问题。
  4. 查找 erl_crash.dump 文件。如果你找到了,通过启动 iex shell 并输入 :observer.start() 来使用观察者。在观察者中,从菜单中选择文件->检查崩溃转储。这也可以帮助您找出问题所在。
  5. 如果您能找出批处理文件构建的确切命令行,请尝试直接运行命令行,看看会发生什么。它的行为不太可能有任何不同,但如果有其他消息被隐藏而不是回显,您可以通过这种方式看到它们。

【讨论】:

  • 非常感谢,将尝试exrm版本检查和erlang重新安装。我尝试运行未修改的 bat 文件,但由于 bat 中缺少“”“”,它试图找到不正确的路径。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2018-04-30
  • 2023-03-18
  • 2017-05-22
  • 1970-01-01
  • 2022-10-18
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多