3

ディスク対応スキーマが存在するMnesiaに依存するアプリケーションAがあるとします。私がやりたいのは、mnesiaが実行されていることを確認し、 Adisc_copies内からテーブルを許可することです。また、複数のアプリケーションが記憶喪失にアクセスする必要がある場合も検討しています。

Mnesiaの起動とスキーマの作成をAのアプリケーションコールバックモジュールにハードコーディングせずに、この種のことを実現するための最も移植性の高い(そして標準的な)方法は何でしょうか?

インタラクティブに開発するとき、私は単に

mnesia:create_schema([node()]).

Erlangシェル内でディスク上のスキーマを初期化してから、mnesiaアプリケーションを

mnesia:start().

最後に、存在するデータベースに依存する他のものを開始します。

4

2 に答える 2

3

依存アプリケーションを.appファイルにリストできます{applications, Apps}。フィールドを参照してください。これにより、mnesiaを実行せずにアプリが起動しないようにすることができ、リリースを作成するときに、アプリの前にmnesiaを起動するスクリプトを生成できます。

mnesiaスキーマは永続化できるため、スキーマの作成は、通常のアプリケーションの起動時にアプリケーションが行う必要のあることではありません。必要に応じてスキーマを設定するスクリプトを作成できます。

アプリケーションが起動すると、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 に答える