Автоматический запуск миграций pre_start в Elixir-Distillery-Release для Windows

Мне нужна ваша помощь! Я пытаюсь запустить миграцию в выпуске ликеро-водочного завода (Elixir-Application), прежде чем приложение запустится автоматически (через Boot Hooks - https://hexdocs.pm/distillery/boot-hooks.html). Платформа разработки и производства должна быть Windows.

Проблема: я не могу найти какую-либо информацию о Windows (.bat)-скриптах, ссылающихся на проблему - я ищу сценарий для "pre_start.bat"-File - для вызова узла ERTS и, наконец, мой код эликсира в нем.

моя винокурня-config: rel\config.exs

environment :prod do
  ...
  set pre_start_hook: "rel/hooks/pre_start"
  ...
end

Требуемый скрипт должен вызывать мой код функции "Elixir.MyApp.ReleaseTask.migrate". Как мне этого добиться?

Следующий код - это то, что я получил до сих пор... но это не работает..

@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

Пожалуйста, поправьте меня, когда я совершенно не прав с этим. Любая помощь приветствуется! Кстати, это феникс-приложение.

1 ответ

Я бы пошел с родным Эрланга escript вместо. Чтобы построить это:

1. обновитьmix.exsНапример, добавить:

escript: [main_module: MyApp, path: "bin/migrator"]

в массив, возвращаемый MyApp.Mixfile.project/0 функция и добавить bin каталог к ​​выпуску:

#         ⇓⇓⇓
files: ~w|bin lib mix.exs README.md|,

в массив, возвращаемый MyApp.Mixfile.package/0

2. создатьMyApp.main/1 функция:

def main(_args) do
  MyApp.ReleaseTasks.migrate
end

У вас все настроено. Там в релизе будет escript в bin/migrator (имя, которое вы использовали в шаге 1.)

Теперь вы должны быть в состоянии бежать bin/migrator, так как это старый добрый исполняемый файл.

Примечание: mix compile будет также создавать этот исполняемый файл, так что вы можете поиграть с ним и проверить его перед запуском distillery,

Другие вопросы по тегам