При запуске начальной загрузки контейнера Elixir я получаю сообщение об ошибке при загрузке модуля pooler_app, как я могу это решить? - PullRequest
2 голосов
/ 05 июня 2019

Я запускаю контейнер с приложением Elixir, но когда я пытаюсь создать загрузчик, я получаю следующую ошибку:

12: 49: 59,687 [error] beam / beam_load.c (1863): Ошибка загрузки модуля pooler_app: Этот файл BEAM был скомпилирован для более поздней версии системы, чем 20. Чтобы исправить это, пожалуйста, перекомпилируйте этот модуль с 20 компилятором. (Использование кода операции 164; этот эмулятор поддерживает только до 159.)

12: 49: 59.707 [info] Выход из пула приложения: выход из:: pooler_app.start (: normal, []) ** (ВЫХОД) возникла исключительная ситуация: ** (UndefinedFunctionError) функция: pooler_app.start / 2 не определена (модуль: pooler_app недоступен) (pooler): pooler_app.start (: normal, []) (ядро) application_master.erl: 273:: application_master.start_it_old / 4 ** (ArgumentError) ошибка аргумента (stdlib): ets.lookup (: cqerl_clusters,: system) (cqerl) /mnt/svcs/lukla/deps/cqerl/src/cqerl_cluster.erl:52:: cqerl_cluster.get_any_client / 1 lib / cassandra.ex: 50: Lukla.Cassandra.new_client / 1 lib / cassandra.ex: 11: Lukla.Cassandra.new! / 1 lib / mix / tasks / cassandra.drop.ex: 16: Mix.Tasks.Cassandra.Drop.run/1 (mix) lib / mix / task.ex: 314: Mix.Task.run_task / 3 (эликсир) lib / enum.ex: 737: Enum. "- каждый / 2-списки ^ foreach / 1-0 -" / 2 (эликсир) lib / enum.ex: 737: Enum.each / 2

Я пытался изменить версию Elixir и Erlang, но ошибка сохраняется.

Я использую asdf с Elixir 1.6.5 и Erlang 20.0.

Редактировать

Я удалил свою папку _build, теперь, когда я снова пытаюсь выполнить загрузку, я получаю следующую ошибку:

14: 17: 44.539 [ошибка] Не удалось загрузить /mnt/svcs/lukla/_build/dev/lib/re2/ebin/re2.beam:: badfile

14: 17: 44,539 [error] beam / beam_load.c (1863): Ошибка загрузки модуля re2: Этот файл BEAM был скомпилирован для более поздней версии системы, чем 20. Чтобы исправить это, пожалуйста, перекомпилируйте этот модуль с 20 компилятором. (Использование кода операции 164; этот эмулятор поддерживает только до 159.)

** (выход) завершен в:: gen_fsm.sync_send_event (#PID <0.360.0>, {: send_query, #Reference <0.2121126444.1751646212.63871>, {: cql_query, "DROP KEYSPACE IF EXISTS lukla_dev;", [ ],: undefined, false, 100,: undefined,: one,: undefined,: undefined}}, 5000) ** (ВЫХОД) возникла исключительная ситуация: ** (UndefinedFunctionError) функция: re2.compile / 1 не определен (модуль: re2 недоступен) (re2): re2.compile ('\' (\? |: \ w +) \ ' (?: (?: [^ "] " [^ "] ") [^ "] $) ') (cqerl) /mnt/svcs/lukla/deps/cqerl/src/cqerl_cache.erl:58:: cqerl_cache.lookup / 2 (cqerl) /mnt/svcs/lukla/deps/cqerl/src/cqerl_client.erl:244:: cqerl_client.live/3 (stdlib) gen_fsm.erl: 483:: gen_fsm.handle_msg / 8 (stdlib) proc_lib.erl: 247:: proc_lib.init_p_do_apply / 3 (stdlib) gen_fsm.erl: 252:: gen_fsm.sync_send_event / 3 (cqerl) /mnt/svcs/lukla/deps/cqerl/src/cqerl.erl:196:: cqerl.run_query / 3 lib / cqex / query.ex: 62: CQEx.Query.call/2 lib / cqex / query.ex: 75: CQEx.Query.call! / 2 lib / mix / tasks / cassandra.drop.ex: 18: Mix.Tasks.Cassandra.Drop.run/1 (mix) lib / mix / task.ex: 314: Mix.Task.run_task / 3 (эликсир) lib / enum.ex: 737: Enum. "- каждый / 2-списки ^ foreach / 1-0 -" / 2 (эликсир) lib / enum.ex: 737: Enum.each / 2

14: 17: 44.572 [ошибка] ** Конечный автомат #PID <0.360.0> завершается ** Последнее сообщение было {: "$ gen_sync_event", {#PID <0.74.0>, #Reference <0.2121126444.1751646212.63875>}, {: send_query, #Reference <0.2121126444.1751646212.63871>, {: cql_query, "DROP KEYSP" ЕСЛИ СУЩЕСТВУЕТ lukla_dev; ", [],: undefined, false, 100,: undefined,: one,: undefined,: undefined}}} ** Когда государство ==: жить** Данные == {: client_state,: cqerl_auth_plain_handler,: undefined,: undefined, {'cassandra', 9042},: tcp, #Port <0.8647>,: undefined,: system,: infinity, "",: undefined, [{0,: undefined}, {1,: undefined}, {2,: undefined}, {3,: undefined}, {4,: undefined}, {5,: undefined}, {6,: undefined}, {7,: не определено}, {8,: не определено}, {9,: не определено}, {10,: не определено}, {11,: не определено}, {12,: не определено}, {13,: не определено}, { 14,: undefined}, {15,: undefined}, {16,: undefined}, {17,: undefined}, {18,: undefined}, {19,: undefined}, {20,: undefined}, {21 ,: undefined}, {22,: undefined}, {23,: undefined}, {24,: undefined}, {25,: undefined}, {26,: undefined}, {27,: undefined}, {28, : не определено}, {29,: не определено}, {30,: не определено}, {31,: не определено}, {32,: не определено}, {33,: не определено}, {34,: не определено}, {35,. ..}, {...}, ...], {[], []}, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, ...], [ ],: hash, {{'cassandra', 9042}, [ include_applications: [], пространство ключей :: system, num_clients: 2, query_timeout: 5000]}} ** Причина прекращения = ** {: «модуль не может быть загружен», [{: re2,: compile, ['\' (\? |: \ w +) \ ' (?: (?: [^ "]) "[^"]") [^"] $) '], []}, {: cqerl_cache,: lookup, 2, [file:' / mnt / svcs / lukla / deps / cqerl / src / cqerl_cache.erl ', строка: 58]}, {: cqerl_client,: live, 3, [file:' /mnt/svcs/lukla/deps/cqerl/src/cqerl_client.erl ', строка: 244]}, {: gen_fsm,: handle_msg, 8, [файл: 'gen_fsm.erl', строка: 483]}, {: proc_lib,: init_p_do_apply, 3, [файл: 'proc_lib.erl', строка: 247]}]}

Мой .dockerignore:

_build
.git
node_modules
deps
priv/static

Мой Dockerfile:

FROM xerpa/ubuntu:v20190114

# Compile in prod mode by default
ARG MIX_ENV=prod

# .mix folder will be inside the project
ARG LUKLA_HOME=/var/www/lukla

ENV MIX_ENV=${MIX_ENV}
ENV LUKLA_HOME=${LUKLA_HOME}
ENV MIX_HOME=${LUKLA_HOME}/.mix

WORKDIR $LUKLA_HOME

RUN wget https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc -O /erlang-solutions.asc \
    && echo deb https://packages.erlang-solutions.com/ubuntu artful contrib | tee /etc/apt/sources.list.d/erlang-solutions.list \
    && apt-key add /erlang-solutions.asc

RUN export DEBIAN_FRONTEND=noninteractive \
    && apt-get update \
    && apt-get install -y \
    esl-erlang=1:20.3 \
    libboost-dev \
    libboost-system-dev \
    libboost-thread-dev \
    libgraphicsmagick-dev \
    libgtest-dev \
    libicu-dev \
    libphonenumber-dev \
    libgeocoding7 \
    libprotobuf-dev \
    libre2-dev \
    libtool-bin \
    libwebp-dev \
    build-essential \
    cmake \
    cmake-curses-gui \
    lsb-release \
    protobuf-compiler \
    openjdk-8-jre \
    locales \
    poppler-utils \
    elixir=1.6.5-1 \
    tzdata \
    && ln -fs /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime \
    && dpkg-reconfigure --frontend noninteractive tzdata \
    && rm -rf /var/lib/apt/lists/*

RUN echo en_US.UTF-8 UTF-8 | tee /etc/locale.gen
RUN echo locales locales/default_environment_locale select en_US.UTF-8 | debconf-set-selections
RUN echo locales locales/locales_to_be_generated multiselect en_US ISO-8859-1, en_US.UTF-8 UTF-8 | debconf-set-selections
RUN locale-gen

# Stuff that should be cached
COPY ./.credo.exs ./.credo.exs
COPY ./.formatter.exs ./.formatter.exs
COPY ./apps/lukla_web/mix.exs ./apps/lukla_web/mix.exs
COPY ./apps/magoo/mix.exs ./apps/magoo/mix.exs
COPY ./apps/yak/mix.exs ./apps/yak/mix.exs
COPY ./mix.exs ./mix.exs
COPY ./mix.lock ./mix.lock
COPY ./config ./config
COPY ./automation ./automation

RUN test -f ${MIX_HOME}/archives/hex*.ez || mix local.hex --force
RUN test -f ${MIX_HOME}/rebar || mix local.rebar --force

RUN mix hex.organization auth xerpa --key xxxxxxxxxxxxxxxxxxxxxxx
RUN mix deps.get
RUN mix deps.compile

COPY ./apps ./apps
COPY ./boot ./boot
COPY ./doc ./doc
COPY ./package ./package

RUN mix compile
RUN mix phoenix.digest apps/lukla_web/web/static/assets -o apps/lukla_web/priv/static

1 Ответ

1 голос
/ 05 июня 2019

Первое сообщение об ошибке указывает на устаревшую сборку, затем, чтобы решить, что мне нужно было:

rm -rf project/_build

И снова попробовал загрузчик, однако он показал вторую ошибку, о библиотеке re2, скомпилированной сдругая версия, даже удаление _build и изображений не решило проблему, затем я подумал о компиляции проекта (и libs, затем попробуйте загрузчик после):

mix compile

Как упоминалось @Маркос Тапахос, я думаю, mix clean тоже сработает.

Тогда моя команда сработала:

./project bootstrap

Я думаю, есть другое место, где пакет был устаревшим на моей машине.

...