Подтвердить что ты не робот

Использование библиотеки Erlang с Elixir

У меня небольшая проблема, пытаясь использовать библиотеку Erlang в проекте Elixir. Данная библиотека является erl8583 для упаковки и распаковки сообщений ISO-8583.

Я нашел репозиторий github для erl8583 и скорректировал my mix.exs на следующее:

defmodule Iso.Mixfile do
  use Mix.Project

  def project do
    [app: :iso,
     version: "0.0.1",
     elixir: "~> 1.0",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  def application do
    [applications: [:logger]]
  end

  defp deps do
    [{:erl8583, github: "mgwidmann/erl8583"}]
  end
end

Когда я запускаю mix deps.get и mix deps.compile, он работает плавно.

Затем я пытаюсь запустить сеанс IEx с помощью iex -S mix и получить следующую ошибку:

Unchecked dependencies for environment dev:
* erl8583 (git://github.com/mgwidmann/erl8583.git)
  could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app. This may happen if the dependency was not yet compiled, or you specified the wrong application name in your deps, or the dependency indeed has no            app file (then you can pass app: false as option)
** (Mix) Can't continue due to errors on dependencies

Он говорит это could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app. Насколько я понимаю, mix должен был просто захватить этот файл из deps/erl8583/src и включить туда (этот файл существует, я проверил).

Я попытался вручную скопировать файл с deps в _build, но не удался. Что я делаю неправильно?

4b9b3361

Ответ 1

Файл источника erl8583 источника erl8583 не указан. Файл .app обычно находится в каталоге ebin для приложения Erlang; если это исходный файл, используемый для создания файла .app, его следует называть .app.src. Если вы переименуете его, он будет работать, как показывает мой сеанс оболочки:

$ mix deps.get
* Getting erl8583 (https://github.com/mgwidmann/erl8583.git)
Cloning into '/private/tmp/m/deps/erl8583'...
remote: Counting objects: 3468, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 3468 (delta 1), reused 0 (delta 0), pack-reused 3464
Receiving objects: 100% (3468/3468), 1002.71 KiB | 618.00 KiB/s, done.
Resolving deltas: 100% (2640/2640), done.
Checking connectivity... done.
$ mv ./deps/erl8583/src/erl8583.app ./deps/erl8583/src/erl8583.app.src
$ mix deps.compile
==> erl8583 (compile)
Compiled src/erl8583_message_helpers.erl
Compiled src/erl8583_message.erl
Compiled src/erl8583_marshaller_xml.erl
Compiled src/erl8583_marshaller_ebcdic.erl
Compiled src/erl8583_marshaller_json.erl
Compiled src/erl8583_marshaller_binary.erl
Compiled src/erl8583_marshaller_ascii.erl
Compiled src/erl8583_fields_2003.erl
Compiled src/erl8583_fields_1993.erl
Compiled src/erl8583_fields.erl
Compiled src/erl8583_marshaller.erl
src/erl8583_convert.erl:133: Warning: variable 'AsciiHex' is unused
src/erl8583_convert.erl:136: Warning: variable 'IntValue' is unused
Compiled src/erl8583_convert.erl
$ iex -S mix
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]

Generated iso app
Interactive Elixir (1.1.0-rc.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>