【问题标题】:OTP - Adding Couchbeam as a dependency - ** exception error: undefined function jsx:decode/1OTP - 添加 Couchbeam 作为依赖项 - ** 异常错误:未定义函数 jsx:decode/1
【发布时间】:2015-01-17 19:03:21
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: erlang erlang-otp relx


    【解决方案1】:

    我的建议是,couchbeam 不包含 jsx 作为应用程序级别的节点(在 .app.src 文件中),因为它可以与不同的 json 编码器一起使用(实际上只与 jsxjiffy 一起使用)。所以,你应该自己决定到底使用哪一个。

    由于 couchbeam 和您的应用程序均未提供有关此依赖关系的任何信息,因此 relx 不包括 jsx 在版本中。

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

    【讨论】:

    • 我明白了。实际上,我选择了 jiffy 并将{erl_opts, [{d, 'WITH_JIFFY'}]}. 添加到rebar.config。我最初在文档中忽略了关于 jiffy 的注释。但是,是的,我发现将 jsx 添加到我自己的 .app.src 可能会更好,谢谢!
    猜你喜欢
    • 2014-10-31
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    相关资源
    最近更新 更多