【发布时间】:2018-04-22 14:16:33
【问题描述】:
我需要你的帮助! 我试图在应用程序自动启动之前(通过 Boot Hooks -https://hexdocs.pm/distillery/boot-hooks.html#content)在酒厂版本(Elixir-Application)中运行迁移。 开发和生产平台必须是 Windows。
问题:我找不到有关 Windows (.bat) 的任何信息 - 引用该问题的脚本 - 我搜索“pre_start.bat”文件的脚本 - 用于调用 ERTS 节点,最后是我的 Elixir 代码它。
我的酿酒厂配置:rel\config.exs
environment :prod do
...
set pre_start_hook: "rel/hooks/pre_start"
...
end
所需的脚本应该调用我的代码“Elixir.MyApp.ReleaseTask.migrate”-Function 我怎样才能做到这一点??
以下代码是我到目前为止所得到的......但它不起作用..
@echo off
echo Running migrations
echo.
echo.
echo.
cd %RELEASE_ROOT_DIR%
@set system_erl="<erl_directory>\erts-9.1\bin\erl.exe"
@set erl=%system_erl%
@set system_root_dir_cmd=%system_erl% -noshell -eval "io:format(\"~s\", [filename:nativename(code:root_dir())])." -s init stop
@set rootdir=%system_root%
@set system_erts_vsn_cmd=%system_erl% -noshell -eval "Ver=erlang:system_info(version),io:format(\"~s\", [Ver])" -s init stop
@set erts_vsn=%system_erts_vsn%
@set erts_dir=%rootdir%\erts-%erts_vsn%
@set rel_name="my_api"
@set rel_vsn="1.0"
@set consolidated_dir=%rootdir%\lib\%rel_name%-%rel_vsn%\consolidated
@%erl% -boot_var ERTS_LIB_DIR "%erts_dir%\..\lib" ^
-hidden -noshell -boot start_clean ^
-pa "%consolidated_dir%" ^
-s "Elixir.MyApp.ReleaseTasks" "seed" -s init stop
echo Migrations run successfully
当我对此完全错误时,请纠正我。 任何帮助表示赞赏!顺便说一句,它是一个凤凰应用程序。
【问题讨论】:
-
您有什么理由为此使用
.bat文件吗?我会生成一个运行此特定功能的 erlang 原生escript,并将其用作pre_start。 -
所有代码行前面都不需要
@符号。一旦您声明了@echo off,就不再需要它们来抑制详细输出。 -
@mudasobwa 你能大致解释一下怎么做吗?谢谢!
-
@Squashman 感谢您提供信息
-
在您的代码中,您有以下变量,这些变量似乎没有已知值,
%RELEASE_ROOT_DIR%、%system_root%和%system_erts_vsn%。这意味着您的变量%rootdir%和%erts_vsn%也将没有值,并且以下变量将没有预期的内容%erts_dir%和%consolidated_dir%。您还不必要地设置了%erl%,因为它的内容匹配%system_erl%,它永远不会改变,%system_root_dir_cmd%和%system_erts_vsn_cmd%似乎都没有使用。此外,当您使用set时,正确的语法是Set "Var=Value"。
标签: windows batch-file elixir database-migration distillery