为什么 Mnesia 不使用磁盘上的数据库?

Why would Mnesia not use the database on disk?

我有一个 Mnesia 数据库,其中的表已写入磁盘。当我停止我的应用程序然后重新启动它时,mnesia:info() 告诉我

opt_disc. Directory "/my/directory/here" is NOT used.

和对应的mnesia:system_info(use_dir)为假。但是 mnesia:system_info(directory) returns 正确目录的名称和文件都在那里,并且它在一分钟前正在使用它们。有没有办法在启动时捕获它并告诉它使用磁盘中的现有数据?

如果我检查 mnesia:table_info(schema, storage_type) 它告诉我 ram_copies。如果我然后尝试 mnesia:change_table_copy_type() 它会写入磁盘,但最终会压缩我的所有数据。

你需要做的是用类似

的东西设置 Mnesia 的 dir 应用程序变量
application:set_env(mnesia, dir, "/path/to/db").

您可以使用发布配置文件或命令行参数设置应用程序变量。

这其实是我自己的困惑。我们的部署过程正在清除 Mnesia 目录,并在启动时重新创建它。所以我没有看到它消失,但这就是我的数据被压缩的原因。

use_dir 是错误的,因为此时没有目录。然后当我在模式上 运行 mnesia:change_table_copy_type() 时,它正在创建目录,但它没有数据。