我在与gen_server、主管和健忘症的合作中遇到了问题。我有一个supervisor:http://pastebin.com/8rkfrq7D,它触发了服务器模块,而服务器模块正在启动mnesia。我的问题是当我写
erl
c(superv).
superv:start_link().
//it opens fine
C^
erl
c(superv).
superv:start_link().
** exception exit: shutdown
//if i try again start_link() it is working我来搞定。我删除了负责启动记忆的部分,它工作得很好,所以我希望即时退出(由ctrl+c)不会正确地关闭记忆。不幸的是,即使我调用mnesia:stop(),在quicking并再次调用start_link()之前,它也会返回异常退出。请帮我解决这个问题。
发布于 2012-12-30 06:28:31
application:start(mnesia).在启动应用程序之前。发行版是一个自包含的Erlang系统,可以在外部机器上启动。然后,您希望生成一个版本,通常使用reltool,然后此版本将在启动my_application_name之前通过启动mnesia进行初始化。
像rebar这样的工具可以帮助您维护您的应用程序和用于构建发行版的reltool.config文件。
请注意,Mnesia需要一个模式才能启动。一个常见的技巧是让您的发行版包含一个默认的空数据库,安装该数据库后,mnesias dir参数将指向该数据库。因此,如果您启动一个新生成的系统,它将有一个数据库可供启动。您可以通过重新安装空数据库来从头开始。有关如何做到这一点的提示,请查看mnesia中的FALLBACK.BUP。
至于你的错误,你不能启动你的服务器两次。第一次运行时,它将自己注册到atom server下,因此当它已经在运行时,随后的重启将使其崩溃。如果在启用SASL应用程序的情况下启动Erlang,有时会得到提示。执行application:start(sasl)或运行erlang,如下所示:
erl -boot start_saslhttps://stackoverflow.com/questions/14083367
复制相似问题