Наша команда разрабатывает проект 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, все прошло хорошо.
Я не знаю, какова основная причина этой проблемы, но я предполагаю, что этот плагин компилирует зависимости нашего проекта за пределами среды 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
View
→Output
и затем в раскрывающемся списке выберите →ElixirLS
проверьте вывод. Пожалуйста, также поделитесь настройками микшированного проекта, где хранить скомпилированные BEAM. Также укажите, как он пытался запустить приложение; описание «не удалось запустить наше приложение» слишком расплывчато. Еслиmix run
или что-то подобное не удалось, это вряд ли может иметь что-то общее с выбранным редактором. - person Aleksei Matiushkin   schedule 06.08.2020elixir --version
в его среде -Erlang/OTP 23 [erts-11.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] Elixir 1.10.4 (compiled with Erlang/OTP 21)
. Похоже, он использует последний одноразовый пароль. В любом случае, мы не хотим, чтобы он понижал или обновлял свой одноразовый пароль. - person Tsutomu   schedule 06.08.2020