2016-05-05 13 views
1

ディスクに書き込まれたテーブルを持つMnesiaデータベースがある場合があります。私は私のアプリを停止してから再起動すると、mnesia:インフォ()なぜMnesiaはディスク上のデータベースを使用しないのですか?

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

と対応mnesia私に語った:SYSTEM_INFO(use_dir)が偽です。しかし、mnesia:system_info(directory)は正しいディレクトリの名前を返します。ファイルはそこにあり、ちょうど1分前に使用されていました。起動時にそれを把握し、ディスクから既存のデータを使用するよう指示する方法はありますか?

mnesia:table_info(schema、storage_type)をチェックすると、ram_copiesが表示されます。 mnesia:change_table_copy_type()を試してみると、ディスクに書き込まれますが、すべてのデータが壊れてしまいます。あなたがする必要がある

答えて

1

これは実際に私自身の混乱のためでした。私たちの展開プロセスはMnesiaディレクトリを一掃し、起動時に再作成されました。だから私はそれがなくなるのを見ていないが、それが私のデータが圧倒されてしまった理由だ。

use_dirは、その時点でディレクトリが存在しないため、falseでした。その後、スキンでmnesia:change_table_copy_type()を実行すると、その時点でディレクトリが作成されていましたが、データはありませんでした。

1

は、あなたがリリース設定ファイルまたはコマンドライン引数を使用してアプリケーション変数を設定することができます

application:set_env(mnesia, dir, "/path/to/db"). 

ようなものでMnesiaのディレクトリのアプリケーション変数を設定されています。

+0

これはmnesiaで見つかったディレクトリとは異なりますか?system_info(directory)?そのディレクトリは正しく設定されているので、それを使用していないだけです(mnesia:system_info(use_dir)== false)。 – Matt

関連する問題