博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在cowboy应用中指定mnesia数据库路径
阅读量:5926 次
发布时间:2019-06-19

本文共 1813 字,大约阅读时间需要 6 分钟。

创建mnesia数据库的步骤简述:

1)定义脚本: 

-module(mns).-export([setup/0, clean/0]).-record(user, { id, coin, diamond, strength, heros }).setup() ->	mnesia:create_table(user,   [{attributes, record_info(fields, user)}, {disc_copies, [node()]}]),	mnesia:create_table(signin, [{attributes, record_info(fields, signin)}, {disc_copies, [node()]}]).	clean() ->	mnesia:delete_schema([node()]).

   以上定义了表结构user,并且指定选项为disc_copies,即内存与磁盘均创建表副本。

2)在命令行输入指令:

erl -name dota@127.0.0.1

  以上指在节点dota@127.0.0.1,创建数据库Mnesia.dota@127.0.0.1。注意节点名称需要与cowboy启动的节点名称一致,否则在cowboy节点上查询表信息失败。

3)进入erl交互后,操作如下:

mnesia:create_schema([node()]). %%在本地节点创建schemamnesia:start().                 %%启动mnesiac("../src/mns").                %%编译并加载mns.erlmns:setup().                    %%创建数据表,执行成功时显示{atomic, ok}mnesia:info().                  %%查看数据况信息mnesia:table_info(user, all).   %%查看user表信息

  这里不要把mnesia的打开关闭操作写入脚本中,否则如果创建表出错的话,错误信息不会输出,会被mnesia:stop()输出的信息覆盖。创建成功后,在Mnesia.dota@127.0.0.1下会创建相关文件。注意不要在工程目录下创建数据库,否则启动工程时数据库目录下的文件会被清除。比如应建立目录mns,进入mns目录后再执行shell。

 

在cowboy应用中调用mnesia相关接口时,提示函数未定义的错误。这是因为mnesia没有启动导致的。

1)首先要在relx.config中增加依赖选项,看起来可能是这样子的:

    {release, {dota_release, "1"}, [dota, sasl, mnesia, runtime_tools]}.

注意不要在.app文件的applications选项中增加mnesia选项,因为每次编译时这个文件都可能会被覆盖,mnesia选项会被抹去。

2)其次需要指定mnesia的数据库目录。可以参考:

    https://stackoverflow.com/questions/23635474/how-to-specify-directory-for-mnesia-in-cowboy-application

    这里只简述下sys.config的处理方式。在cowboy应用中,主目录下relx.config中已经指定了sys.config的路径:

    {sys_config, "rel/sys.config"}

    因此只需要在rel目录下的sys.config中增加选项(rel目录下的配置文件在make run时会被自动拷贝到_rel/your-release/releases/your-version目录下):

    { mnesia, [{ dir, "/path/to/dir" }] }

    比如,sys.config看起来可能是这样的:

    [{ mnesia, [{ dir, "/home/ubuntu/erlang/dota/mns/Mnesia.dota@127.0.0.1"}]}].

    其它还有通过vm.args或者修改启动脚本来实现的方式,具体参考链接。

转载于:https://www.cnblogs.com/Jackie-Snow/p/8462693.html

你可能感兴趣的文章
免杀新姿势:利用线程将恶意代码注入到内存中
查看>>
使用RxJava从多个数据源获取数据
查看>>
Javascript中的循环变量声明,到底应该放在哪儿?
查看>>
苹果的热榜:积分墙背后的隐秘世界
查看>>
大数据能否力挽国足败落狂澜?
查看>>
HealthKit有名无实,疑点重重
查看>>
“爱思助手”曝为iOS木马:可绕过苹果DRM机制
查看>>
“威胁情报”在手,反黑客终于有地图了!
查看>>
从零开始来看一下Java泛型的设计
查看>>
互联网打响云上争夺战:从计算到生态
查看>>
如何使用CPU来加速你的Linux命令
查看>>
多云战略:企业如何精益求精?
查看>>
12款白帽子用于黑客渗透测试的操作系统
查看>>
大数据对六大领域的挑战
查看>>
思科为其核心网络业务增加了订阅服务
查看>>
社交背水一战?校园日记背后,支付宝野心你真能懂?
查看>>
《企业级ios应用开发实战》一导读
查看>>
嵌入式WiFi芯片价格战已经打响 MCU企业该醒悟了
查看>>
Facebook为Messenger应用添加群组付款功能
查看>>
物联网离风口还差最关键一环?
查看>>