diff options
| author | José Valim <jose.valim@plataformatec.com.br> | 2019-05-18 20:11:35 +0200 |
|---|---|---|
| committer | José Valim <jose.valim@plataformatec.com.br> | 2019-05-18 20:11:36 +0200 |
| commit | 4307a342570438bc3dde53ae78d91c8ab8e3c96b (patch) | |
| tree | 6c27f036255c87ef00cbb33625a2813a68d40241 | |
| parent | a697f8fd83dc5881c120abf8e5ffbe70ed1d4477 (diff) | |
| download | elixir-jv-run-one-off-interactive.tar.gz | |
Start the VM in interactive mode for rpc/eval/remotejv-run-one-off-interactive
This speeds up boot time and decreases memory use.
| -rw-r--r-- | lib/mix/lib/mix/tasks/release.ex | 4 | ||||
| -rw-r--r-- | lib/mix/lib/mix/tasks/release.init.ex | 21 | ||||
| -rw-r--r-- | lib/mix/test/fixtures/release_test/lib/release_test.ex | 1 | ||||
| -rw-r--r-- | lib/mix/test/mix/tasks/release_test.exs | 5 |
4 files changed, 21 insertions, 10 deletions
diff --git a/lib/mix/lib/mix/tasks/release.ex b/lib/mix/lib/mix/tasks/release.ex index 1eef241b8..8187e90c7 100644 --- a/lib/mix/lib/mix/tasks/release.ex +++ b/lib/mix/lib/mix/tasks/release.ex @@ -622,6 +622,10 @@ defmodule Mix.Tasks.Release do files to. It can be set to a custom directory. It defaults to `$RELEASE_ROOT/tmp` + * `RELEASE_MODE` - if the release should start in embedded or + interactive mode. Defaults to "embedded". It applies only to + start/daemon/install commands + * `RELEASE_DISTRIBUTION` - how do we want to run the distribution. Using `name` (long names) or `sname` (short names). Defaults to `sname` which allows access only within the current system. diff --git a/lib/mix/lib/mix/tasks/release.init.ex b/lib/mix/lib/mix/tasks/release.init.ex index bcacc6d9d..db6deb610 100644 --- a/lib/mix/lib/mix/tasks/release.init.ex +++ b/lib/mix/lib/mix/tasks/release.init.ex @@ -42,10 +42,7 @@ defmodule Mix.Tasks.Release.Init do def vm_args_text, do: ~S""" ## Customize flags given to the VM: http://erlang.org/doc/man/erl.html - ## -name/-sname/-setcookie are configured via env vars, do not set them here - - ## Preloads all modules instead of loading them dynamically - -mode embedded + ## -mode/-name/-sname/-setcookie are configured via env vars, do not set them here ## Number of dirty schedulers doing IO work (file, sockets, etc) ##+SDio 5 @@ -87,15 +84,16 @@ defmodule Mix.Tasks.Release.Init do export RELEASE_NAME="${RELEASE_NAME:-"<%= @release.name %>"}" export RELEASE_VSN="${RELEASE_VSN:-"$(cut -d' ' -f2 "$RELEASE_ROOT/releases/start_erl.data")"}" export RELEASE_COMMAND="$1" + export RELEASE_MODE="${RELEASE_MODE:-"embedded"}" REL_VSN_DIR="$RELEASE_ROOT/releases/$RELEASE_VSN" . "$REL_VSN_DIR/env.sh" - export RELEASE_COOKIE=${RELEASE_COOKIE:-"$(cat "$RELEASE_ROOT/releases/COOKIE")"} - export RELEASE_NODE=${RELEASE_NODE:-"$RELEASE_NAME"} - export RELEASE_TMP=${RELEASE_TMP:-"$RELEASE_ROOT/tmp"} - export RELEASE_VM_ARGS=${RELEASE_VM_ARGS:-"$REL_VSN_DIR/vm.args"} - export RELEASE_DISTRIBUTION=${RELEASE_DISTRIBUTION:-"sname"} + export RELEASE_COOKIE="${RELEASE_COOKIE:-"$(cat "$RELEASE_ROOT/releases/COOKIE")"}" + export RELEASE_NODE="${RELEASE_NODE:-"$RELEASE_NAME"}" + export RELEASE_TMP="${RELEASE_TMP:-"$RELEASE_ROOT/tmp"}" + export RELEASE_VM_ARGS="${RELEASE_VM_ARGS:-"$REL_VSN_DIR/vm.args"}" + export RELEASE_DISTRIBUTION="${RELEASE_DISTRIBUTION:-"sname"}" rand () { od -t xS -N 2 -A n /dev/urandom | tr -d " \n" @@ -117,6 +115,7 @@ defmodule Mix.Tasks.Release.Init do exec "$REL_VSN_DIR/$REL_EXEC" \ --cookie "$RELEASE_COOKIE" \ --$RELEASE_DISTRIBUTION "$RELEASE_NODE" \ + --erl "-mode $RELEASE_MODE" \ --erl-config "$RELEASE_SYS_CONFIG" \ --boot "$REL_VSN_DIR/start" \ --boot-var RELEASE_LIB "$RELEASE_ROOT/lib" \ @@ -247,6 +246,7 @@ defmodule Mix.Tasks.Release.Init do if not defined RELEASE_NAME (set RELEASE_NAME=<%= @release.name %>) if not defined RELEASE_VSN (for /f "tokens=1,2" %%K in (!RELEASE_ROOT!\releases\start_erl.data) do (set ERTS_VSN=%%K) && (set RELEASE_VSN=%%L)) + if not defined RELEASE_MODE (set RELEASE_MODE=embedded) set RELEASE_COMMAND=%~1 set REL_VSN_DIR=!RELEASE_ROOT!\releases\!RELEASE_VSN! call !REL_VSN_DIR!\env.bat @@ -319,6 +319,7 @@ defmodule Mix.Tasks.Release.Init do "!REL_VSN_DIR!\!REL_EXEC!.bat" !REL_EXTRA! ^ --cookie "!RELEASE_COOKIE!" ^ --!RELEASE_DISTRIBUTION! "!RELEASE_NODE!" ^ + --erl "-mode !RELEASE_MODE!" ^ --erl-config "!RELEASE_SYS_CONFIG!" ^ --boot "!REL_VSN_DIR!\start" ^ --boot-var RELEASE_LIB "!RELEASE_ROOT!\lib" ^ @@ -366,7 +367,7 @@ defmodule Mix.Tasks.Release.Init do !ERLSRV! add !RELEASE_NAME!_!RELEASE_NAME! ^ -name "!RELEASE_NODE!" ^ - -args "-setcookie !RELEASE_COOKIE! -config !RELEASE_SYS_CONFIG! -boot !REL_VSN_DIR!\start -boot_var RELEASE_LIB !RELEASE_ROOT!\lib -args_file !REL_VSN_DIR!\vm.args" + -args "-setcookie !RELEASE_COOKIE! -config !RELEASE_SYS_CONFIG! -mode !RELEASE_MODE! -boot !REL_VSN_DIR!\start -boot_var RELEASE_LIB !RELEASE_ROOT!\lib -args_file !REL_VSN_DIR!\vm.args" if %ERRORLEVEL% EQU 0 ( echo Service installed but not started. From now on, it must be started and stopped by erlsrv: diff --git a/lib/mix/test/fixtures/release_test/lib/release_test.ex b/lib/mix/test/fixtures/release_test/lib/release_test.ex index 123f2e117..9cb4da2a9 100644 --- a/lib/mix/test/fixtures/release_test/lib/release_test.ex +++ b/lib/mix/test/fixtures/release_test/lib/release_test.ex @@ -13,6 +13,7 @@ defmodule ReleaseTest do release_node: System.get_env("RELEASE_NODE"), release_vsn: System.get_env("RELEASE_VSN"), cookie_env: cookie, + mode: :code.get_mode(), node: node(), root_dir: :code.root_dir() |> to_string(), static_config: Application.fetch_env(:release_test, :static), diff --git a/lib/mix/test/mix/tasks/release_test.exs b/lib/mix/test/mix/tasks/release_test.exs index 7782bac6d..5d6c24df7 100644 --- a/lib/mix/test/mix/tasks/release_test.exs +++ b/lib/mix/test/mix/tasks/release_test.exs @@ -130,6 +130,7 @@ defmodule Mix.Tasks.ReleaseTest do assert %{ app_dir: app_dir, cookie_env: ^cookie, + mode: :embedded, node: release_node("release_test"), protocols_consolidated?: true, release_name: "release_test", @@ -188,6 +189,7 @@ defmodule Mix.Tasks.ReleaseTest do open_port(Path.join(root, "bin/runtime_config"), ['start']) assert %{ + mode: :embedded, node: release_node("runtime_config"), protocols_consolidated?: true, release_name: "runtime_config", @@ -238,6 +240,7 @@ defmodule Mix.Tasks.ReleaseTest do assert %{ app_dir: app_dir, cookie_env: "abcdefghijk", + mode: :embedded, node: release_node("demo"), protocols_consolidated?: true, release_name: "demo", @@ -303,6 +306,7 @@ defmodule Mix.Tasks.ReleaseTest do assert %{ cookie_env: "abcdefghij", + mode: :interactive, node: :nonode@nohost, protocols_consolidated?: true, release_name: "eval", @@ -331,6 +335,7 @@ defmodule Mix.Tasks.ReleaseTest do assert wait_until_evaled(Path.join(root, "RELEASE_BOOTED")) == %{ app_dir: Path.join(root, "lib/release_test-0.1.0"), cookie_env: "abcdefghij", + mode: :embedded, node: :"permanent2@#{@hostname}", protocols_consolidated?: true, release_name: "permanent2", |
