2009-12-03 4 views

답변

1

이전에이 작업을했는데 이미 존재하는 테이블에 경고가 울립니다. 그러나 내가 그것을 모르고있는 일부 부작용을 가지고있을 가능성이 있기 때문에 프로덕션에서 다시 실행하는 연습을하지는 않겠지 만 앞으로 출시되지 않을 것이라는 보장이 없다고해도 .

왜 여러 번 실행 하시겠습니까?

+1

나는 또한 mnesia 스키마의 취급이 어색하다고 느낍니다. 설치 절차의 일종으로 한 번 호출해야하지만 그렇게 할 수있는 편리한 장소가 없습니다. – Zed

+0

@ Zed : 저도 그렇게 느낍니다. "한 번 해보십시오"관리 경로를 만들 필요가 없으므로 모든 데몬 시작시이 기능을 "실행"하려고합니다. – jldupont

+0

postgres와 initdb는 어떻게 처리하나요? 귀하는 귀하의 신청서를 시작할 때 전화를합니까? – Christian

0

두 번째 호출에서 예외가 발생할 수 있습니다. 그냥 잡으세요.

+0

http://www.erlang.org/doc/man/mnesia.html#create_schema-1에 문서에 나와 있지 않으므로 '예외'에 대해 확실합니까? – jldupont

+2

예외를 throw하지 않습니다. 오류가 발생하면 {error, ...}를 반환합니다. – Zed

1

그것은 어떤 부작용이 없지만, 나중에 발생합니다 호출 {오류, {노드, {already_exists, 노드}}}.

ensure_schema() -> 
    Node = node(), 
    case mnesia:create_schema([Node]) of 
    ok -> ok; 
    {error, {Node, {already_exists, Node}}} -> ok; 
    Error -> Error 
    end. 
관련 문제