difficulty getting mnesia to work with cowboy web backend

Loïc Hoguin essen@REDACTED
Sun Oct 25 18:45:37 CET 2020


On 25/10/2020 00:31, jdmeta wrote:
> i'm building a web backend using cowboy and mnesia.
> at this point i'm running mnesia on only one node and don't need 
> distributed mnesia for the foreseeable future.
> i installed cowboy and bootstrapped my cowboy app per the instructions 
> in the cowboy user guide on ninenines.eu.
> i run my cowboy app with "make run" which uses the rather involved 
> "erlang.mk" makefile in the ninenines repo.
> i need to specify that my cowboy app is dependent on the mnesia app.
> i edited "Makefile" in my app's root directory and added "mnesia" to the 
> DEPS variable.
> when i then execute "make run" i get "Error: Unknown or invalid 
> dependency: mnesia."
> when i execute "make run", erlang.mk appears to automatically construct 
> ebin/<my_app>.app - no doubt using some other input which i haven't 
> found yet.
> if i manually edit ebin/<my_app>.app to add mnesia to the "applications" 
> tuple then mnesia runs as expected.
> how do i specify that my cowboy app is dependent on mnesia such that the 
> <my_app>.app config file gets constructed correctly every time i execute 
> "make run"?

Mnesia is bundled with OTP so you need to add it to LOCAL_DEPS so that 
it is not getting fetched:

LOCAL_DEPS = mnesia

> back again to the gigantic erlang.mk where i found where the erl command 
> that runs erts which in turn runs my cowboy app.
> i added the "-mnesia dir <Dir>" option to the erl command line, but 
> mnesia is still not finding my pre-defined schema - it's running in 
> ram-only mode which means it didn't find a pre-defined schema.
> i can run erl manually in the directory above the directory where my 
> pre-defined schema is located, and see that the schema is there and it's 
> configured as i expected.
> when executing "make run" (navigating through the erlang.mk maze), how 
> do i get mnesia to see the schema directory when it's launched by the 
> cowboy app?
> do i need to pass an argument to some start() function?
> does erlang.mk need to be modified or one of its inputs modified?

Assuming you're using releases ("make run" is that) you just need to add 
your -mnesia parameters to the config/vm.args file.

Loïc Hoguin

More information about the erlang-questions mailing list