[erlang-questions] Where to configure & start mnesia in a release?
Igor Clark
igor.clark@REDACTED
Sun Apr 15 23:01:32 CEST 2018
Thanks very much Nuku, that's the piece of the puzzle I was missing. I
hadn't understood properly about the release packaging - I thought that
if I added mnesia into the relx config, it would automatically start the
mnesia app too, and I wanted to do that manually in my app. But after
reading your email I added it into the relx/release section, and as you
said, the mnesia package is now included in the release, but I can still
start it manually, and the console boots correctly and accesses the
mnesia data.
Thank you!
Best,
Igor
On 15/04/2018 21:01, Nuku Ameyibor wrote:
> mnesia is not included as part of the release .
> when rebar3 shell command is run the path to mnesia is added
> automatically to the code paths .
> in a release environment however its not copied over into the
> release libs unless specified in one of your .app.src files.
> in your app.src file check to see if mnesia is one of the
> applications which has to be started before the main application is
> started.
>
>
> On Sun, Apr 15, 2018 at 3:50 PM, Igor Clark <igor.clark@REDACTED
> <mailto:igor.clark@REDACTED>> wrote:
>
> Thanks Nuku,
>
> - It's definitely crashing due to the mnesia configuration - it
> shows a {badmatch,undefined} error on the line where I call { ok,
> MnesiaDir } = application:get_env( mnesia, dir ), and I've tried
> io:format()'ing the result of application:get_env( mnesia, dir ),
> which shows 'undefined' when running as a release
>
> - relx section of rebar.config is set up exactly like that - I
> used rebar3 to generate the release
>
> - sys.config has exactly that mnesia entry
>
> It all works as expected with 'rebar3 shell', environment variable
> is found, mnesia starts, it all works fine - but when I run
> 'rebar3 release' and try to run the generated startup script,
> either with 'console' or with 'start' and looking in the log file,
> the OTP application included in the release gets 'undefined' from
> application:get_env( mnesia, dir ).
>
> From your sys.config example I realise I could say for example [ {
> my_app, [ { mnesia_dir, "/tmp/my_db_dir" } ] } ], and use
> application:get_env( my_app, mnesia_dir ) to initialise; this
> works and returns { ok, "/tmp/my_db_dir" }, which is great, but
> then ok = application:ensure_started( mnesia ) fails with
> {{badmatch, {error,{"no such file or directory","mnesia.app"}}}. I
> have no idea where mnesia.app should go, and I haven't been able
> to find any references to this file in docs or online that explain
> where it should go or what should be in it, except that it exists
> in the mnesia package under the OTP source tree.
>
> So still pretty unclear how to proceed, pointers welcome!
>
> Thanks,
> Igor
>
>
> On 15/04/2018 16:06, Nuku Ameyibor wrote:
>>
>> - under_build/<profile>/rel/<release>/bin/<release> console
>> it fails (returns undefined), so the app crashes on start,
>> regardless of whether <profile> is prod or default
>>
>> it may or may not be crashing due the mnesia configuration .
>> you may have to check the the erl_crash.dump to see the cause of
>> the crash .
>>
>>
>> How do I set mnesia application environment variables in the
>> release project? (Or, maybe, how do I get the OTP application
>> to be able to access the release project's application
>> environment variables?)
>>
>> in the relx section of your rebar.config you can set a sys_config
>> to be used
>> {relx,
>> [
>> {sys_config,"config/sys.config"}
>> ]
>> in that sys.config you can setup environmental variables to be
>> used by your applications including an entry for mnesia.
>> [
>> {mnesia,
>> [{dir,"/tmp/my_db_dir"}]
>> },
>> {app1,[{a,1},{b,2}],
>> {app2,[{a,3},{b,4}]
>> }
>> ]
>> this will be used by your release system when the release is
>> created .
>> check out http://www.rebar3.org/docs/releases
>> <http://www.rebar3.org/docs/releases> .
>>
>>
>>
>> On Sat, Apr 14, 2018 at 3:17 PM, Igor Clark <igor.clark@REDACTED
>> <mailto:igor.clark@REDACTED>> wrote:
>>
>> Hi list,
>>
>> I have an OTP application which uses mnesia. It
>> checks/ensures the schema and table files exist and then
>> calls application:ensure_started( mnesia ) in its
>> application:start/2 callback. It works fine when I run the
>> application on its own under rebar3 shell, but it doesn't
>> work when I try to run it from an OTP release:
>>
>> - When I run the OTP app under rebar3 shell in its own
>> separate directory, with { mnesia, [ { dir, "/tmp/my_db_dir"
>> } ] } in priv/sys.config, it works fine and
>> application:get_env( mnesia, dir ) returns /tmp/my_db_dir as
>> normal/expected
>>
>> - If I set { mnesia, [ { dir, "/tmp/my_db_dir" } ] } in
>> <release>/config/sys.config, then:
>>
>> - under rebar3 shell --name=myapp@REDACTED, calling
>> application:get_env( mnesia, dir ) succeeds (returns
>> /tmp/my_db_dir) , and the app uses reads/writes mnesia tables
>> successfully
>>
>> - under_build/<profile>/rel/<release>/bin/<release>
>> console it fails (returns undefined), so the app crashes on
>> start, regardless of whether <profile> is prod or default
>>
>> How do I set mnesia application environment variables in the
>> release project? (Or, maybe, how do I get the OTP application
>> to be able to access the release project's application
>> environment variables?)
>>
>> Also, I realise I could be going about this the wrong way -
>> maybe mnesia should be configured inside the specific OTP
>> app, even under a release? Apart from the fact that that
>> doesn't seem to work (as I have it set up, anyway), I'm aware
>> I should steer clear of "included applications" - not least
>> because I want to be able to use the OTP app in other
>> projects - so I guess there's a broader question of how to
>> configure mnesia in general, in how & when to create schema
>> and tables, if it could be used by multiple OTP apps in a
>> release?
>>
>> Bit puzzled, appreciate any advice!
>>
>> Cheers,
>> Igor
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>> http://erlang.org/mailman/listinfo/erlang-questions
>> <http://erlang.org/mailman/listinfo/erlang-questions>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180415/44366543/attachment.htm>
More information about the erlang-questions
mailing list