Второй выпуск обновления не может быть успешно установлен. Из журнала ошибок, приведенного ниже, кажется, что функция code_change вызывается снова и неправильно обрабатывает состояние.
Шаги для воспроизведения
Я следую примерам и шагам в книге «Программирование эликсира> = 1.6», глава 20 OTP.Applications.
- При коммите one , я подготовил заявку как версию 0.2.0
- При коммите two состояние в
server.ex
было обновлено и необходимо запустить code_change. Я могу успешно обновить код до 0.3.0.
После двух предыдущих шагов, если я просто изменил текст возврата в функции next_number
в server.ex
и обновил версию, например, до 0.3.1, оставив функцию code_change на шаге 2 без изменений, горячее обновление завершится неудачно с ниже ошибка.
После шага 2 я несколько раз запускал новую функцию Sequence.Server.next_number()
и Sequence.Server.increment_number(2)
, чтобы убедиться, что она вступает в силу и состояние обновляется до нового формата.
Вопрос в том, почему code_change("0")
с версией, помеченной как последняя версия, все еще может быть запущено во втором обновлении?
Журналы ошибок
Не удалось установить обработчик выпуска: {: code_change_failed,
PID <10063.770.0>, Sequence.Server, "1", {: EXIT, {: function_clause, [{Sequence.Server,: code_change, ["1",% { struct :
Sequence.Server.State, current_number: 8, delta: 2}, []], [file:
'lib / sequence / server.ex', строка: 44]}, {: gen_server,
: system_code_change, 4, [file: 'gen_server.erl', строка: 794]}, {: sys,
: do_change_code, 5, [file: 'sys.erl', строка: 573]}, {: sys,: do_cmd, 6,
[file: 'sys.erl', строка: 465]}, {: sys,: handle_system_msg, 8, [file:
'sys.erl', строка: 365]}, {: proc_lib,: init_p_do_apply, 3, [file:
'proc_lib.erl', строка: 249]}]}}}
Описание проблемы
Каковы ожидаемые результаты? горячее обновление кода должно быть успешным
Какая версия ликеро-водочного завода? 2.0.9
В каких версиях ОС, Erlang / Elixir вы видите эту проблему? Mac 10.13.6, Elixir 1.7.2
Этот вопрос фактически задается как выпуск спиртзавода в Github.