OTP - Добавление Couchbeam в качестве зависимости - ** ошибка исключения: неопределенная функция jsx:decode/1

Я использую арматуру, чтобы получить / скомпилировать мои зависимости, которые имеют следующее в rebar.conf:

{deps, [
    ...
    {couchbeam, ".*", {git, "git://github.com/benoitc/couchbeam.git", {branch, "master"}}}
  ]}.

затем я использую relx для генерации релиза. relx.config имеет:

{release, {myapp, "0.0.1"}, [myapp, couchbeam]}.
{extended_start_script, true}.

myapp.app.src:

{application, myapp,
 [                             
  {description, ""},           
  {vsn, "1"},
  {registered, []},            
  {applications, [             
                  kernel,      
                  stdlib,  

                  ... ,

                  couchbeam    
                 ]},
  {mod, { myapp_app, []}},    
  {env, []}
 ]}.

запустив couchdb, я запускаю релиз под консолью и пытаюсь протестировать couchbeam со следующими строками:

Host = "localhost",
Port = 5984,
Prefix = "",
Options = [],
S = couchbeam:server_connection(Host, Port, Prefix, Options).
{ok, _Version} = couchbeam:server_info(S).

последняя строка дает мне ошибку:** exception error: undefined function jsx:decode/1


Чтобы решить это, я открыл deps/couchbeam/couchbeam.app.src и изменилось:

 {applications, [kernel,
                  stdlib,
                  asn1,
                  crypto,
                  public_key,
                  ssl,
                  idna,
                  hackney
                  ]},

и добавил jsx:

{applications, [kernel,
                  stdlib,
                  asn1,
                  crypto,
                  public_key,
                  ssl,
                  idna,
                  hackney,
                  jsx
                  ]},

Что-то не так в моей настройке того, как я добавил couchbeam в качестве зависимости? Я чувствую, что не должен взламывать.app.src одной из моих зависимостей

1 ответ

Решение

Мое предложение состоит в том, что диван не включает jsx как уровень приложения (в .app.src файл), потому что он может работать с различными кодерами JSON (на самом деле только с jsx а также jiffy). Таким образом, вы должны решить, какой именно использовать самостоятельно.

Поскольку ни couchbeam, ни ваше приложение не предоставляют никакой информации об этой зависимости, relx не включает jsx в выпуске.

Признайтесь, я не пытался, но я думаю, что ваше решение заключается в определении jsx как зависимость вашего собственного приложения (то есть, добавить его к вашему собственному .app.src файл вместо couchbeam.app.src).

Другие вопросы по тегам