2015-09-18 15 views
12

Sto riscontrando un piccolo problema nel tentativo di utilizzare una libreria Erlang all'interno di un progetto Elixir. La libreria in questione è la erl8583 per il confezionamento e il disimballaggio dei messaggi ISO-8583.Utilizzo della libreria Erlang con elisir

ho trovato un repository github per erl8583 e regolato il mio mix.exs al seguente:

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 

Quando eseguo mix deps.get e mix deps.compile, funziona senza intoppi.

Poi, cerco di avviare una sessione iEX con iex -S mix, e ottenere il seguente errore:

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 

Si dice che could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app. Come ho capito, mix dovrebbe aver appena preso quel file da deps/erl8583/src e incluso lì (quel file esiste, ho controllato).

Ho provato a copiare manualmente il file da deps a _build ma non è riuscito. Che cosa sto facendo di sbagliato?

risposta

10

Il file .app della sorgente dell'applicazione .app è in errore. Un file .app normalmente risiede nella directory ebin per un'applicazione Erlang; se si tratta di un file sorgente utilizzato per generare un file .app, dovrebbe invece essere denominato .app.src. Se si rinomina, funzionerà, come mostra la seguente sessione di shell:

$ 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

Questo risolto. Grazie! – thepanuto