如何处理mnesia架构的标准方式?

时间:2010-06-28 17:58:00

标签: deployment erlang mnesia

假设我有一个应用程序 A ,它取决于具有启用磁盘的架构的mnesia。 我想做的是确保 mnesia正在运行并允许disc_copies个表 来自 A 。我也在考虑多个应用程序需要访问mnesia的情况。

如果没有将mnesia启动和架构创建硬编码到 A 的应用程序回调模块中,那么实现此类事情的最便携(和标准)方法是什么?

在进行交互式开发时,我只需要做一个

mnesia:create_schema([node()]).

在Erlang shell中初始化磁盘架构,然后 用

启动mnesia应用程序
mnesia:start().

并最终启动依赖于存在的数据库的其他那些。

2 个答案:

答案 0 :(得分:3)

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

由于可以使mnesia模式持久化,因此创建模式不是应用程序在普通应用程序启动时应该执行的操作。您可以编写一个escript,根据需要设置模式。

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

答案 1 :(得分:0)

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

调用

mnesia:change_table_copy_type(schema, node(), disc_copies).
应用程序启动时

将确保架构是基于磁盘的 允许mnesia由启动脚本启动。 This blog entry非常有帮助。