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
).