OTP - 添加Couchbeam作为依赖项 - **异常错误:未定义函数jsx:decode / 1

时间:2014-11-20 02:39:20

标签: erlang otp relx

我正在使用rebar来获取/编译我的依赖项,其中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 个答案:

答案 0 :(得分:2)

我的建议是,couchbeam不包含jsx作为应用程序级别的拒绝(在.app.src文件中),因为它可以使用不同的json编码器(实际上仅与jsx一起使用和jiffy)。因此,您应该决定自己使用哪一个。

由于沙发横梁和您的应用程序都没有提供有关此依赖关系的任何信息,relx在发布时不包含jsx

承认,我没有尝试,但我认为您的解决方案是将jsx定义为您自己的应用程序的依赖项(即,将其添加到您自己的.app.src文件而不是{{ 1}})。