[erlang-questions] Where to configure & start mnesia in a release?

Igor Clark igor.clark@REDACTED
Tue Apr 17 00:30:32 CEST 2018


Thanks Jesper, that makes sense. So people tend to use a helper (I guess 
an escript?) which sets up the database schema & tables and then they 
start the app.

When you say "configuration is embedded in the release", do you mean the 
mnesia conf goes in the config/sys.config at the top level of the 
release? Does that mean that all the OTP apps included in the release 
have to use the same mnesia conf?

Cheers,
Igor

On 16/04/2018 10:55, Jesper Louis Andersen wrote:
> On Sun, Apr 15, 2018 at 1:48 PM Igor Clark <igor.clark@REDACTED 
> <mailto:igor.clark@REDACTED>> wrote:
>
>     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?
>
>
> One way of going at it, written some time ago when I wrote the GraphQL 
> tutorial: https://shopgun.github.io/graphql-erlang-tutorial/#_plan
>
> [Quote]
>
> A common problem people run into with Mnesia is how to “get started”. 
> What people often resort to are solutions where an initial database is 
> created if it doesn’t exist. These solutions are often brittle.
>
> Here, we pick another solution. A helper can create a database schema 
> for us, with all the necessary tables. The real release /assumes/ the 
> presence of an initial database and won’t boot without one. This means 
> the Erlang release is simpler. There is always some database from 
> which it can boot and operate. That database might be the empty 
> database since we are just starting out. But in particular, the 
> release won’t concern itself with creating an initial database. Rather 
> it will assume one is already existing.
>
> The situation is not much different than using a traditional 
> schema-oriented database. Usually, you have to create the database 
> first, and then populate the schema with some initial data. It is just 
> because of Rails/Django like systems in which databases are 
> migrate-established, we’ve started using different models.
>
> [EndQuote]
>
> Mnesia is part of your release and is started as part of your release, 
> but its configuration is embedded within the release. This avoids the 
> whole problem of creation-if-not-exist, which is probably not a good 
> solution for a database schema, I think. It is convenient... until it 
> accidentally the whole database you had.
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180416/4bc0f81b/attachment.htm>


More information about the erlang-questions mailing list