假设我有一个应用程序 A ,它取决于具有启用磁盘的架构的mnesia。
我想做的是确保 mnesia正在运行并允许disc_copies
个表
来自 A 。我也在考虑多个应用程序需要访问mnesia的情况。
如果没有将mnesia启动和架构创建硬编码到 A 的应用程序回调模块中,那么实现此类事情的最便携(和标准)方法是什么?
在进行交互式开发时,我只需要做一个
mnesia:create_schema([node()]).
在Erlang shell中初始化磁盘架构,然后 用
启动mnesia应用程序mnesia:start().
并最终启动依赖于存在的数据库的其他那些。
答案 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非常有帮助。