3

假设我有一个应用程序A,它依赖于 mnesia,并且存在启用磁盘的模式。我想做的是确保mnesia 正在运行并允许Adisc_copies内的表。我也在考虑多个应用程序需要访问 mnesia 的情况。

什么是实现这种事情的最便携(和标准)的方式,而不是将 mnesia 启动和模式创建硬编码到A的应用程序回调模块中?

当交互式开发时,我只是做一个

mnesia:create_schema([node()]).

在 Erlang shell 中初始化磁盘模式,然后启动 mnesia 应用程序

mnesia:start().

最后启动其他依赖于存在数据库的数据库。

4

2 回答 2

3

您可以在 .app 文件中列出相关应用程序,请参阅该{applications, Apps}字段。这样,您可以确保应用程序在没有运行 mnesia 的情况下不会启动,并且在创建版本时,它可以生成一个脚本,在您的应用程序之前启动 mnesia。

由于 mnesia 模式可以持久化,因此创建模式不是您的应用程序在普通应用程序启动时需要做的事情。您可以编写一个 escript 来根据需要设置架构。

当您的应用程序启动时,它可以使用mnesia:wait_for_tables/2来确保表已准备好使用。

于 2010-06-28T18:56:42.953 回答
0

我自己找到了解决方案。这绝不是标准方法,但它有效。

打电话

mnesia:change_table_copy_type(schema, node(), disc_copies).

在应用程序启动时将确保架构是基于磁盘的,同时允许通过启动脚本启动 mnesia。这篇博文很有帮助。

于 2010-06-30T13:24:17.410 回答