2010-06-28 5 views
3

디스크 사용 스키마가있는 mnesia에 의존하는 응용 프로그램이 있다고 가정합니다. 내가 뭘하고 싶은지 mnesia가 실행되고 disc_copies 테이블 에서 A에서 테이블을 허용하고 있습니다. 또한 여러 응용 프로그램에서 음산증에 액세스해야하는 경우를 고려하고 있습니다.mnesia 스키마를 표준 방식으로 처리하는 방법은 무엇입니까?

응용 프로그램 콜백 모듈에 하드 코딩 용 미디어 재시작 및 스키마 생성을 수행하지 않고 이런 종류의 작업을 수행하는 데 가장 휴대 가능하고 표준적인 방법은 무엇입니까 ?

개발 대화 형으로 내가 단순히 디스크에있는 스키마를 초기화 얼랑 쉘 내에서

mnesia:create_schema([node()]). 

을 다음

mnesia:start(). 

으로 mnesia 응용 프로그램을 시작 마지막으로 다른 사람을 시작합니다 존재하는 데이터베이스에 따라 달라집니다.

답변

0

직접 해결책을 찾았습니다. 이것은 결코 표준 방법은 아니지만 작동합니다. 수 mnesia 부팅 스크립트에 의해 시작되는 동안 스키마가 디스크 기반 있는지 확인합니다 응용 프로그램 시작에

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

를 호출

. This blog entry은 매우 도움이되었습니다.

+0

링크가 끊어졌습니다. 다음은 Web Archive에서 제공하는 미러입니다. http://web.archive.org/web/20110326145256/http://blog.darmasoft.net/2010/01/13/another-step-closer-to-faultless-distributed- 데이터 –

3

.app 파일에 종속 응용 프로그램을 나열 할 수 있습니다 ({applications, Apps} 필드 참조). 그런 식으로 언론계를 실행하지 않고도 앱이 시작되지 않도록하고 출시를 만들 때 앱 앞에 망간을 시작하는 스크립트를 생성 할 수 있습니다.

mnesia 스키마를 영구적으로 만들 수 있으므로 스키마를 만드는 것이 일반적인 응용 프로그램 시작시 응용 프로그램에서 수행해야하는 작업이 아닙니다. 필요에 따라 스키마를 설정하는 escript를 작성할 수 있습니다.

응용 프로그램이 시작되면 mnesia:wait_for_tables/2을 사용하여 테이블을 사용할 준비가되었는지 확인할 수 있습니다.

+0

"스크립트로 수행"이 올바른 접근 방법입니까? –

+0

스키마 생성은 응용 프로그램 설정의 일부로 간주되어야합니다. Mnesia 시작은 응용 프로그램의 전체 프로세스 트리 종속성 체인을 정의하는 .app 파일에 정의되어 있습니다. 생성 된 릴리스 파일은 실제로 모든 종속 응용 프로그램과 함께 응용 프로그램을 시작하는 데 사용됩니다. –

+0

가능한 한 고통없이 응용 프로그램을 배포하고 싶습니다. 그리고 우리가 직면 한 시나리오에서 스키마를 수동으로 (또는 설치 스크립트로) 설정하는 것은 허용되지 않습니다. –

관련 문제