Pergunta

Meu aplicativo erlang chamado "meuapp1"constrói bem usando vergalhão, desde que eu não inclua outro aplicativo erlang"meu_outro_app"em suas dependências (deps).Depois de adicioná-lo às minhas dependências e especificá-lo em rebar.config, sua construção falha por erro como tal:

> rebar compile
Uncaught error in rebar_core: {'EXIT',
                               {badarg,
                                [{re,run,[0.9,".*",[{capture,none}]],[]},
                                 {rebar_deps,is_app_available,5,
                                  [{file,"src/rebar_deps.erl"},{line,418}]},
                                 {rebar_deps,find_dep_in_dir,3,
                                  [{file,"src/rebar_deps.erl"},{line,380}]},
                                 {rebar_deps,find_dep,3,
                                  [{file,"src/rebar_deps.erl"},{line,362}]},
                                 {rebar_deps,find_deps,4,
                                  [{file,"src/rebar_deps.erl"},{line,345}]},
                                 {rebar_deps,preprocess,2,
                                  [{file,"src/rebar_deps.erl"},{line,63}]},
                                 {rebar_core,acc_modules,5,
                                  [{file,"src/rebar_core.erl"},{line,492}]},
                                 {rebar_core,process_dir1,6,
                                  [{file,"src/rebar_core.erl"},{line,195}]}]}}

O rebar.config é

%%-*- mode: erlang -*-

{deps, [
          {webmachine, "1.10.*", {git, "git://github.com/basho/webmachine", "HEAD"}},
          amqp_client,
          rabbit_common,
          my_other_app
       ]
}.

A estrutura da árvore é assim:

myapp1
    -src/...
    -ebin/...
    -rebar.config
    -deps/
        -webmachine
        -mochiweb
        -my_other_app
              -src/...
              -ebin/...
              -include/...

Na medida em que eu removo my_other_app do rebar.config, tudo funciona (exceto que o aplicativo não funciona devido ao fato de estar excluindo uma dependência necessária, mas pelo menos ele compila depois de comentar o código que usa essa dependência.

Estou tentando entender o que "is_app_available"função faz no rebar, já que meu my_other_app é de fato um aplicativo OTP, mas não é iniciado no momento em que compilo com o rebar (ele será iniciado pelo próprio myapp1 assim que alguns serviços forem iniciados.

Foi útil?

Solução 2

Encontrei o problema...

O aplicativo de dependência tinha um Vsn (versão) em seu meu_outro_app.app.src arquivo que não era uma string (em vez disso, valor numérico).Isso causou erro no vergalhão.Certamente o vergalhão poderia ter uma mensagem de captura/erro mais amigável...

Portanto, certifique-se de verificar o {vsn, "1.1"} tag, então tem um corda em vez de decimal/numérico.

{application, my_other_app, [
    {description, "my other appapplication"},
    {vsn, "1.1"},
    {applications, [kernel, stdlib]},
    {modules, [.........etc.etc.etc......]},
    {registered, [my_other_app]},
    {mod,{ my_other_app, {true} } }
]}.

Outras dicas

Parece que a versão de um dos seus aplicativos pode ser um átomo, 0.9, em vez da string, "0.9".O re módulo requer um iodata() para esse argumento.Tente descobrir qual aplicativo é esse e altere o átomo para uma string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top