Getting error {missing_app_file,.. on rebar get-deps - erlang

I set-up some dependencies in my rebar.config (which I have done previously in other projects)
rebar.config:
{sub_dirs, ["sbin", "priv"]}.
{lib_dirs, ["deps/erlang"]}.
{erl_opts, [{parse_transform, lager_transform}]}.
{eunit_opts, [verbose, {report,{eunit_surefire,[{dir,"."}]}}]}.
{cover_enabled, true}.
{cover_export_enabled, true}.
{deps, [
{lager, "2.0.3",
{git, "git://github.com/basho/lager.git", {tag, "2.0.3"}}},
{ezk, ".*",
{git, "git#github.com:campanja/ezk.git"}}
]}.
When I run rebare get-deps I am getting the following errors:
ERROR: Dependency dir /Users/me/workspace/erlang/try-ezk/deps/ezk failed application validation with reason:
{missing_app_file,"/Users/me/workspace/erlang/try-ezk/deps/ezk"}.
ERROR: 'get-deps' failed while processing /Users/me/workspace/erlang/try-ezk: rebar_abort
I'm really not sure what I'm doing wrong this time. Any help would be greatly appreciated.

did you try with this syntax:
{ezk, ".*",{git, "git://github.com/campanja/ezk.git"}}

Related

How to resolve dependency issues with erlang rebar?

I'm trying to add swagger to an existing demo project erlang_rest_api as a learning experience, but I don't seem to be getting very far...
I cloned the repos:
git clone https://github.com/dronowar/erlang_rest_api
Then I added cowboy_swagger to rebar.config:
{cowboy_swagger, ".*", {git, "git://github.com/inaka/cowboy_swagger.git"}}
And when I build I get:
Dependency not available: jsx-2.9.0 (undefined)
Dependency not available: cowboy-2.5.0 (undefined)
Dependency not available: ranch-1.6.2 (undefined)
Dependency not available: trails-2.1.0 (undefined)
So I add to rebar.config:
{jsx, ".*", {git, "git://github.com/talentdeficit/jsx.git", {tag, "2.9.0"}}},
{ranch, ".*", {git, "git://github.com/ninenines/ranch.git", {tag, "1.6.2"}}},
{trails, ".*", {git, "git://github.com/inaka/cowboy-trails.git", {tag, "2.1.0"}}},
And then I delete the deps directory and build again:
...
==> poolboy (get-deps)
==> sync (get-deps)
==> katana_test (get-deps)
==> jsx (get-deps)
ERROR: Failed to load erlang_rest_api/deps/trails/rebar.config: {error,
{34,
file,
{error,
function_clause,
[{erl_eval,
'-inside-an-interpreted-fun-',
[katana_test],
[]},
{erl_eval,
eval_fun,
6,
[{file,
"erl_eval.erl"},
{line,
829}]},
{erl_eval,
expr_list,
6,
[{file,
"erl_eval.erl"},
{line,
888}]},
{erl_eval,
expr,
5,
[{file,
"erl_eval.erl"},
{line,
240}]},
{erl_eval,
expr_list,
6,
[{file,
"erl_eval.erl"},
{line,
888}]},
{erl_eval,
expr,
5,
[{file,
"erl_eval.erl"},
{line,
240}]},
{erl_eval,
eval_lc1,
6,
[{file,
"erl_eval.erl"},
{line,
706}]},
{erl_eval,
eval_generate,
7,
[{file,
"erl_eval.erl"},
{line,
735}]}]}}}
make: *** [Makefile:7: deps] Error 1
katana_test seems to be some kind of testing tool. I tried adding that repos (inaka/katana-est) to rebar.config but it's not working, either.
I also tried tagging cowboy as version "2.5.0" as listed in "undefined" earlier, but that made no difference.
Do we really need to this specific, listing every dependent repository of every dependency?
I also tried using hex instead:
{jsx, ".*"},
{ranch, ".*"},
{trails, ".*"},
{cowboy_swagger, "2.1.0"}
but I still got:
Dependency not available: jsx-.* (undefined)
Dependency not available: trails-.* (undefined)
Dependency not available: cowboy_swagger-2.1.0 (undefined)
ERROR: compile failed while processing
Am I missing another dependency?
The problem arises from the fact that cowboy_swagger is built to be used with rebar3 and it's not compatible with the old rebar, but erlang_rest_api is using the old rebar, as you can see in its Makefile.
The solution to your problem may be as simple as using rebar3 to build the project. But careful if you do that since that would break make run and make run-local. You'll have to figure out how to achieve the same results using releases.

How to install erlydtl to make it usable in nitrogen?

I found, that erlydtl may be used with nitrogen.
Unfortunately, author hasn't described how he installed erlydtl to make it usable
from nitrogen.
Probably somebody has ever faced with the same issue, I'm facing with. If so,
please share your experience.
Thank you in advance.
You should be able to just add ErlyDTL to your app's rebar.config:
{erlydtl, ".*", {git, "git://github.com/erlydtl/erlydtl", {branch, master}}}
Then run ./rebar get-deps compile to install it in lib/ directory of your app and recompile.
Here's the step-by-step instructions
Create a new folder to hold Nitrogen repo:
$ mkdir nitrogen-dtl
$ cd nitrodgen-dtl
Clone Nitrogen from GitHub:
git clone https://github.com/nitrogen/nitrogen.git
cd nitrogen
Build a slim (1) or a full (2) release called "dtltest" locateed in nitrogen-dtl folder:
make slim_inets PROJECT=dtltest (1)
make rel_inets PROJECT=dtltest (2)
Edit rebar.config in dtltest folder:
cd ../dtltest
vi rebar.config
add the ErlyDTL as a dependency (and a comma to the line before it):
{simple_bridge, ".*", {git, "git://github.com/nitrogen/simple_bridge",{branch, master}}},
{nprocreg, ".*", {git, "git://github.com/nitrogen/nprocreg", {branch, master}}},
{nitrogen_core, ".*", {git, "git://github.com/nitrogen/nitrogen_core",{branch, master}}},
{sync, ".*", {git, "git://github.com/rustyio/sync", {branch, master}}},
{erlydtl, ".*", {git, "git://github.com/erlydtl/erlydtl", {branch, master}}}
Download and compile dependencies with rebar:
./rebar get-deps compile
Start Nitrogen console, verify that application is running and try compiling an ErlyDTL template:
(dtltest#127.0.0.1)1> erlydtl:compile_template("<html>{{ greeting }}</html>", dtltest_template).
(dtltest#127.0.0.1)2> dtltest_template:render([{greeting, "Hallo Welt!"}]).
You should get a rendered template:
{ok,[<<"<html>">>,"Hallo Welt!",<<"</html>">>]}
If the template compiles, then ErlyDTL is installed correctly and you can use the code similar to the Gist you referenced in your application.
Cheers!
In n2o you don't need to do anything. DTL is already included.
All you need is using #dtl element:
main() ->
#dtl{file = "index",
app = review,
bindings = [{body,"Hello"},{title,"Index"}]}.
Also n2o can be run natively on 17.0

Always got undef error of lager_transform when using lager log framework

I want to use lager as my log utility and I have orgnazied my proj as below:
proj\
|
|--lager\
| |--src\
| |--ebin\
| |--...
|
|--logserver\
| |--src\
| |--ebin\
| |--rebar.config
| |--...
|
|--rebar
|
However, when I try to compile logserver, I always got the following error:
D:\proj\logserver>..\rebar compile
==> logserver (compile)
src/logserver_app.erl:none: error in parse transform 'lager_transform': {undef,
[{lager_transform,
parse_transform,
[[{attribute,1,file,
{"src/logserver_app.erl",1}},
...
Can anyone know the reason? Thanks!
These is some additional information:
I am using Windows OS and using latest version of Erlang and rebar
and lager.
lager itself has already been compiled. We can find the D:\proj\logserver>dir ..\lager\ebin\lager_transform.beam (This will
succeed)
rebar's config file(D:\proj\logserver\rebar.config):
...
{erl_opts, [{parse_transform, lager_transform}, debug_info,{d,'TEST'}, {i, "include"}, {src_dirs, ["src"]}]}.
{lib_dirs, ["..\lager\ebin"]}.
...
If you already have lager in your deps then make sure that you move lager dependency first in rebar.config so that way it will compile first. Like so:
{deps,[
lager,
..
]}.
Did you add lager as a dependency in your rebar.config? I guess lager is not in the path.
From the rebar wiki:
To use lager in your application, you need to define it as a rebar dep
or have some other way of including it in erlang’s path. You can then
add the following option to the erlang compiler flags:
{parse_transform, lager_transform}
You can add 'lager' as a dependency by editing your rebar.config:
%% == Dependencies ==
%% Where to put any downloaded dependencies. Default is "deps"
{deps_dir, "deps"}.
%% What dependencies we have, dependencies can be of 3 forms, an application
%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or
%% an application name, a version and the SCM details on how to fetch it (SCM
%% type, location and revision). Rebar currently supports git, hg, bzr and svn.
{deps, [application_name,
{application_name, "1.0.*"},
{application_name, "1.0.*",
{git, "git://github.com/basho/rebar.git", {branch, "master"}}}]}.
In your case, that should be something like:
{deps, [{lager, ".*", {git, "git://github.com/basho/lager.git", "HEAD"}}]}.
More info about the rebar dependency manager here:
https://github.com/basho/rebar/wiki/Dependency-management

rebar generate error

I'm attempting to use rebar to generate a node, and I've followed the instructions from here.
Running rebar get-deps compile works fine, but running rebar generate gives me
ERROR: Unable to generate spec: read file info /home/inaimathi/common/rebar.config~ failed
ERROR: Unexpected error: rebar_abort
ERROR: generate failed while processing /home/inaimathi/common/rel: rebar_abort
Odd, given that rebar.config~ shouldn't figure anywhere in the generate process. Removing rebar.config~ and trying again gives me the same error, but relating to rebar.config instead.
My rebar.config looks like
{sub_dirs, ["rel"]}.
{lib_dirs, ["deps"]}.
{deps, [{erlsha2, ".*", {git, "git://github.com/vinoski/erlsha2.git", "HEAD"}}]}.
and my reltool.config looks like
{sys, [
{lib_dirs, []},
{erts, [{mod_cond, derived}, {app_file, strip}]},
{app_file, strip},
{rel, "common", "1",
[
kernel,
stdlib,
sasl,
common
]},
{rel, "start_clean", "",
[
kernel,
stdlib
]},
{boot_rel, "common"},
{profile, embedded},
{incl_cond, derived},
{mod_cond, derived},
{excl_archive_filters, [".*"]}, %% Do not archive built libs
{excl_sys_filters, ["^bin/.*", "^erts.*/bin/(dialyzer|typer)",
"^erts.*/(doc|info|include|lib|man|src)"]},
{excl_app_filters, ["\.gitignore"]},
{app, common, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]}
]}.
{target_dir, "common"}.
{overlay, [
{mkdir, "log/sasl"},
{copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},
{copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"},
{copy, "files/common", "bin/common"},
{copy, "files/common.cmd", "bin/common.cmd"},
{copy, "files/start_erl.cmd", "bin/start_erl.cmd"},
{copy, "files/install_upgrade.escript", "bin/install_upgrade.escript"},
{copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},
{copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}
]}.
(entirely rebar-generated except that I had to add {lib_dir, ".."} as per the instructions I linked).
What am I doing wrong?
EDIT: I should mention the basics, given that I have no idea what's going wrong. Erlang R15B01 out of the Debian Wheezy repo running on a 64-bit core i3. I did a manual pull and build of rebar from the basho repo. Not sure if anything else is relevant.
EDIT2: The same thing happens with the pre-built version of rebar found at https://github.com/downloads/basho/rebar/rebar
You should have run the rebar generate command in the rel directory before this issue, it is fixed now.

Command 'generate' not understood or not applicable

I am trying to run rebar generate to generate a release for an erlang rebar project and getting the following error. Any ideas what I am doing wrong?
./rebar generate
Command 'generate' not understood or not applicable
I am on OSX with erlang version Erlang R14B03 and below is my rebar.conf
{lib_dirs, ["deps"]}.
{sub_dirs, ["rel"]}.
{deps, [
{folsom, ".*", {git, "git://github.com/boundary/folsom", "master"}}
]}.
{require_otp_vsn, "R14|R15"}.
{erl_opts, [
fail_on_warning,
debug_info,
warn_missing_spec
]}.
{clean_files, ["*.eunit", "ebin/*.beam", "rel/graphsom"]}.
{cover_enabled, true}.
{eunit_opts, [verbose, {report, {eunit_surefire, [{dir, "."}]}}]}.
You are getting this error because rebar is unable to find a release. You should check if you have reltool.config somewhere and rebar knows about it.
If no release exists, you can create a new one:
mkdir rel
cd rel
../rebar create-node nodeid=YOUR_NODE_ID
Lastly, you need to tell rebar about the release. In your case, you already have the following added to rebar.config:
{sub_dirs, ["rel"]}.
This should allow the generate command to build a new release.

Resources