Пакет Erlang не загружается

Я пытаюсь использовать пакет Erlang (этот: https://github.com/komone/qrcode) внутри моего проекта Phoenix, поэтому я просто пытаюсь получить его из своего микс-файла:

  defp deps do
    [{:phoenix, "~> 1.3.0-rc"},
     {:phoenix_pubsub, "~> 1.0"},
     {:phoenix_ecto, "~> 3.2"},
     {:postgrex, ">= 0.0.0"},
     {:gettext, "~> 0.11"},
     {:cowboy, "~> 1.0"},
     {:comeonin, "~> 3.0"},
     {:uuid, "~> 1.1"},
     {:timex, "~> 3.1"},
     {:timex_ecto, "~> 3.1"},
     {:porcelain, "~> 2.0"},
     {:qrcode, git: "https://github.com/komone/qrcode"}, # <--
     {:credo, "~> 0.7", only: [:dev, :test]}]
  end

Мне пришлось вручную erl -make внутри извлеченного каталога, чтобы он скомпилировался, но при запуске phoenix я получаю следующую ошибку:

** (Mix) Could not start application qrcode: exited in: :qrcode.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function :qrcode.start/2 is undefined or private
            (qrcode) :qrcode.start(:normal, [])
            (kernel) application_master.erl:273: :application_master.start_it_old/4

Есть ли еще один шаг, чтобы заставить его работать?


person Kernael    schedule 26.04.2017    source источник


Ответы (2)


Только что нашел удобный вариант микширования для прохождения:

{:qrcode, git: "https://github.com/komone/qrcode", app: false}

чтобы предотвратить попытку Mix загрузить файл приложения пакета.

https://hexdocs.pm/mix/Mix.Tasks.Deps.html

Примечание: вы можете использовать опцию :compile, чтобы избавиться от ручной компиляции пакета Emakefile, в этом случае:

{:qrcode, git: "https://github.com/komone/qrcode", app: false, compile: "erl -make"}
person Kernael    schedule 26.04.2017
comment
Я предполагаю, что это заботится и о erlc_paths тоже. Я только что понял, что мой пример ниже был для включения кода Erlang в мой проект, а не как зависимость. - person Steve Pallen; 26.04.2017
comment
Просто примечание, это новое в Эликсире 1.4. - person Justin Wood; 26.04.2017

РЕДАКТИРОВАТЬ

Мой пример ниже предназначен для включения исходного кода Erlang в проект Elixir, а не как зависимость, как заданный вопрос. Я оставлю пост здесь на тот случай, если он поможет другим, кто пытается скомпилировать свой код Erlang.

Прошло некоторое время с тех пор, как я это сделал, но, оглядываясь на предыдущий проект, я вижу следующее в моем файле mix.exs:

def project do
  [ app: :mdse,
    # ...
    erlc_paths: ["./lib/mdse/rpc/src", "src"]
  ]
end

Это должно заставить его автоматически компилироваться с помощью mix.

После просмотра источника qrcode, который вы предоставили, это не приложение. Так что я не верю, что вы можете добавить это в свой applications: список. Вместо этого вы должны иметь возможность использовать его как любую библиотеку Erlang, например :qrcode.encode(...).

person Steve Pallen    schedule 26.04.2017
comment
:qrcode не указан в моих приложениях в файле микса, но все же Mix, кажется, пытается загрузить его как приложение по умолчанию. - person Kernael; 26.04.2017
comment
@Kernael спасибо, что поделились этим. Я никогда раньше не пытался использовать не-приложение из зависимости. Возможно, вы только что сэкономили мне время, чтобы почесать голову в будущем. - person Steve Pallen; 26.04.2017