Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OTP - Adding Couchbeam as a dependency - ** exception error: undefined function jsx:decode/1

I'm using rebar to get/compile my dependencies which has the following in rebar.conf:

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

then I use relx to generate the release. relx.config has:

{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, []}
 ]}.

having started couchdb, I run my release under console and try to test couchbeam with the following lines:

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

the last line gives me the error: ** exception error: undefined function jsx:decode/1


To solve this, I opened deps/couchbeam/couchbeam.app.src and changed:

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

and added jsx:

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

Is there something wrong in my setup of how I added couchbeam as a dependency? I feel like I'm not supposed to hack the .app.src of one of my dependencies

like image 964
neildaemond Avatar asked Apr 08 '26 16:04

neildaemond


1 Answers

My suggestion is that couchbeam doesn't include jsx as application-level dendency (in .app.src file) because it can work with different json encoders (actually only with jsx and jiffy). So, you should decide which one exactly to use by your own.

Since neither couchbeam nor your application doesn't provide any information about this depedency, relx doesn't include jsx in release.

Confess, I didn't try, but I think your solution is to define jsx as dependency of your own application (i.e., add it to your own .app.src file instead of couchbeam.app.src).

like image 173
Viacheslav Kovalev Avatar answered Apr 11 '26 03:04

Viacheslav Kovalev



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!