Как обращаться со схемами Mnesia стандартным способом? - PullRequest
3 голосов
/ 28 июня 2010

Предположим, у меня есть приложение A , которое зависит от мнезии при наличии схемы с поддержкой диска.То, что я хотел бы сделать, это убедиться, что работает в mnesia и позволяет disc_copies таблицам из A .Я также рассматриваю случай, когда несколько приложений должны иметь доступ к Mnesia.

Каким был бы самый переносимый (и стандартный) способ достижения такого рода вещей без жесткого кодирования запуска mnesia и создания схемы в модуле обратного вызова приложения A ?

При интерактивной разработке я просто выполняю

mnesia:create_schema([node()]).

в оболочке Erlang для инициализации схемы на диске, затем запускаю приложение mnesia с помощью

mnesia:start().

инаконец запустите другие, которые зависят от присутствия базы данных.

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Вы можете перечислить зависимые приложения в вашем .app-файле, см. Поле {applications, Apps}.Таким образом, вы можете убедиться, что приложение не запускается без запуска mnesia, и при создании выпуска оно может сгенерировать скрипт, который запускает mnesia перед вашим приложением.

Поскольку схему mnesia можно сделать постоянной, создаваяСхема - это не то, что ваше приложение должно делать при обычном запуске приложения.Вы можете написать сценарий, который устанавливает схему так, как вам нужно.

Когда ваше приложение запускается, оно может использовать mnesia: wait_for_tables / 2 , чтобы убедиться, что таблицы готовы к использованию.

0 голосов
/ 30 июня 2010

Я сам нашел решение. Это ни в коем случае не стандартный метод, но он работает.

Calling

mnesia:change_table_copy_type(schema, node(), disc_copies).

при запуске приложения гарантирует, что схема будет основана на диске, а разрешить запуск mnesia с помощью загрузочного скрипта. Эта запись в блоге была очень полезна.

...