2015-09-18 4 views
12

Ich habe ein kleines Problem, das versucht, eine Erlang-Bibliothek innerhalb eines Elixir-Projekts zu verwenden. Die fragliche Bibliothek ist die erl8583 für das Verpacken und Entpacken von Nachrichten nach ISO-8583.Verwendung der Erlang-Bibliothek mit Elixir

fand ich ein Github-Repository für erl8583 und angepasst meine mix.exs auf die folgenden:

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 

Als ich mix deps.get und mix deps.compile laufen, es läuft reibungslos.

Dann versuche ich, eine IEx Sitzung mit iex -S mix zu starten, und die folgende Fehlermeldung erhalten:

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 

Er sagt, es could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app. Wie ich es verstehe, sollte Mix einfach diese Datei von deps/erl8583/src gegriffen haben und dort enthalten sein (diese Datei existiert, ich habe geprüft).

Ich habe versucht, die Datei von deps zu _build manuell zu kopieren, aber keinen Erfolg. Was mache ich falsch?

Antwort

10

Die erl8583 Anwendungsquelle .app Datei wird falsch benannt. Eine .app Datei befindet sich normalerweise im Verzeichnis ebin für eine Erlang-Anwendung; Wenn es sich um eine Quelldatei handelt, die zum Generieren einer .app-Datei verwendet wird, sollte sie stattdessen .app.src heißen. Wenn Sie es umbenennen, wird es funktionieren, wie meine Shell-Sitzung unten zeigt:

$ 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)> 
+0

Dies löste es. Vielen Dank! – thepanuto