Наша команда разрабатывает проект Phoenix, и на этой неделе к нам присоединился новый участник. Он пытается работать в среде Docker в системе Ubuntu 20.04.
Он вытащил исходный код из нашего репозитория GitHub и обнаружил, что наше приложение не запускается с этим сообщением об ошибке:
[error] beam/beam_load.c(1883): Error loading module telemetry_app:
This BEAM file was compiled for a later version of the run-time system than 22.
To fix this, please recompile this module with an 22 compiler.
(Use of opcode 169; this emulator supports only up to 168.)
[info] Application telemetry exited: exited in: :telemetry_app.start(:normal, [])
** (EXIT) an exception was raised:
** (UndefinedFunctionError) function :telemetry_app.start/2 is undefined (module :telemetry_app is not available)
(telemetry 0.4.2) :telemetry_app.start(:normal, [])
(kernel 6.5.2.1) application_master.erl:277: :application_master.start_it_old/4
Его результат mix hex.info
находится здесь:
Hex: 0.20.5
Elixir: 1.10.3
OTP: 22.3.4.2
Built with: Elixir 1.10.0 and OTP 21.3
Мы, кроме него, продолжаем работать в обычном режиме. Как мы можем ему помочь?
Мы нашли возможного виновника: ElixirLS , плагин для Visual Studio Code.
Помимо него, члены нашей команды используют текстовые редакторы, чем VSCode.
Когда он удалил этот плагин из VSCode, все прошло хорошо.
Я не знаю, в чем root причина этой проблемы, но я полагаю, что этот плагин компилируется зависимости нашего проекта вне среды Docker, поэтому возникает несоответствие версий.
Он попытался запустить наше приложение с помощью docker-compose up -d app
.
Команда, указанная в разделе command
в docker-compose.yml
это:
elixir --cookie xyz --sname xyz@app
--erl "-kernel inet_dist_listen_min 6000 inet_dist_listen_max 6100" -S mix phx.server