简体   繁体   中英

Erlang rebar3 builds

I am building a server based on 'cowboy', using 'jiffy' for json processing. The problem I am running into is that after starting the shell by executing the binary generated by rebar3, only 'cowboy' is functioning as expected, but I have no access to mnesia, which is part of OTP. Also running rebar3 using the.config file produces this output:

>There are missing function calls in the release.
===> Make sure all applications needed at runtime are included in the release.
===> db_access:init_tables/0 calls undefined function **mnesia:create_table/2**
===> db_access:insert_apod_entries/1 calls undefined function **mnesia:transaction/1**
===> db_access:insert_apod_entries/1 calls undefined function **mnesia:write/1**

If I start Erlang by issuing the command 'erl' then mnesia is availabe. I've include the rebar.config I'm using. Any help with this issue would be greatly appreciated.

%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ts=4 sw=4 ft=erlang et

%% escript_incl_extra is for internal rebar-private use only.
%% Do not use outside rebar. Config interface is not stable.
{require_erts_vsn, ".*"}.
{require_otp_vsn, ".*"}.
{require_min_otp_vsn, ".*"}.


{escript_incl_extra, [{"priv/templates/*", "."}]}.
{include_src, false}.

{deps, [
    {jiffy, "1.1.1", "deps/"},
    {cowlib,"2.11.0", "deps/"},
    {cowboy, "2.9.0", "deps/"}
]}.

{erl_first_files, ["src/db_access.erl", 
                    "src/tar_watch_handler.erl",
                    "star_watch_server_app.erl",
                    "star_watch_server_sup.erl"
                    ]}.   

% {artifacts, ["/home/oleg/Projects/erlang_practice/star_watch_server/deps/jiffy/priv/jiffy.so"]}.
{plugins, [
    { pc, {git, "git@github.com:blt/port_compiler.git", {branch, "master"}}}
]}.
{overrides,
 [{override, jiffy, [
     {plugins, [pc]},
     {artifacts, ["priv/jiffy.so"]},
     {provider_hooks, [
         {post,
             [
             {compile, {pc, compile}},
             {clean, {pc, clean}}
             ]
          }]
      }
  ]}
]}.

{base_dir, "_build"}.
%% directory in '<base_dir>/<profile>/' where deps go
{deps_dir, "lib"}.
%% where rebar3 operates from; defaults to the current working directory
{root_dir, "."}.
%% where checkout dependencies are to be located
{checkouts_dir, "_checkouts"}.
%% where, under <base_dir>/<profile> checkout dependencies are to be built
{checkouts_out_dir, "checkouts"}.
%% directory in '<base_dir>/<profile>/' where plugins go
{plugins_dir, "plugins"}.
%% directories where OTP applications for the project can be located
{project_app_dirs, ["apps/*", "lib/*", "."]}.
%% Directories where source files for an OTP application can be found
{src_dirs, ["src"]}.
%% Paths to miscellaneous Erlang files to compile for an app
%% without including them in its modules list
{extra_src_dirs, []}.


%% Types dict:dict() and digraph:digraph() have been introduced in Erlang 17.
%% At the same time, their counterparts dict() and digraph() are to be
%% deprecated in Erlang 18. namespaced_types option is used to select proper
%% type name depending on the OTP version used.
{erl_opts,
 [
  {platform_define, "(linux|solaris|freebsd|darwin)", 'HAVE_SENDFILE'},
  {platform_define, "(linux|freebsd)", 'BACKLOG', 128},
  {platform_define, "R13", 'old_inets'},
  {src_dirs, ["src"]}
  ]}.

{minimum_otp_vsn, "25.0.4"}.
{application_resource_extensions, [
    ".app.src.script", ".app.src"
]}.

{cover_enabled, true}.
{validate_app_modules, true}.
{base_dir, "_build"}.
%% directory in '<base_dir>/<profile>/' where deps go
{deps_dir, "lib"}.
%% where rebar3 operates from; defaults to the current working directory
{root_dir, "."}.
%% where checkout dependencies are to be located
{checkouts_dir, "_checkouts"}.
%% where, under <base_dir>/<profile> checkout dependencies are to be built
{checkouts_out_dir, "checkouts"}.




{xref_checks, []}.
{xref_queries,
 [{"(XC - UC) || (XU - X - B
      - (\"escript\":\"foldl\"/\"3\")
      - (\"eunit_test\":\"function_wrapper\"/\"2\")
      - (\"eflame\":\"apply\"/\"5\")
      - (\"abnfc\":\"file\"/\"2\")
      - (\"erlydtl\":\"compile\"/\"3\")
      - (\"lfe_comp\":\"file\"/\"2\")
      - (\"neotoma\":\"file\"/\"2\")
      - (\"protobuffs_compile\":\"scan_file\"/\"2\")
      - (\"gpb_compile\":\"file\"/\"2\")
      - (\"gpb_compile\":\"format_error\"/\"1\")
      - (\"diameter_codegen\":\"from_dict\"/\"4\")
      - (\"diameter_dict_util\":\"format_error\"/\"1\")
      - (\"diameter_dict_util\":\"parse\"/\"2\")
      - (\"erlang\":\"timestamp\"/\"0\")
      - (\"rebar_rnd\":\"seed\"/\"1\")
      - (\"rebar_rnd\":\"uniform\"/\"0\"))",
         []}]}.

{dialyzer,
 [
  {plt_extra_apps, [diameter]},
  {warnings,
   [
    unmatched_returns,
    error_handling,
    race_conditions
   ]}
 ]}.

You will need to add mnesia to your app's app.src file.

From http://rebar3.org/docs/workflow/#setting-up-dependencies

If the dependency is needed at runtime by your application in order for it to work (eg you need a web server or call the library directly), add it to your application's.app.src file under the {applications, [stdlib, kernel, ...]} tuple.

The tool that generates the release (relx) also uses the same definition to figure out which applications to include in the release.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM