创建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()]). %%在本地节点创建schema
mnesia:start(). %%启动mnesia
c("../src/mns"). %%编译并加载mns.erl
mns: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或者修改启动脚本来实现的方式,具体参考链接。

最新文章

  1. Downgrade PHP 7 to PHP 5.6 on Ubuntu 16.04
  2. html尖角提示框的实现
  3. 第 29 章 CSS3 弹性伸缩布局[下]
  4. [20140722] forwarded和forwarding记录
  5. jQuery实现无缝滚动条
  6. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
  7. 2014.7.12 敏捷个人奥森健步走&敏友分享会.活动报道
  8. Log4net使用笔记
  9. Win7桌面快捷方式全变成某个软件的图标,然后所有快捷方式都只打开这个图标的软件
  10. Android 高仿微信头像截取 打造不一样的自定义控件
  11. SQL语句创建access表
  12. PHPmysqli的 其他函数 从数据库中读出数据并且打印出来
  13. SQL语句操作数据
  14. Ubuntu 16.04更新grub-pc提示脚本/var/lib/dpkg/info/grub-pc.postinst 执行错误
  15. VB编写的程序加入防火墙的例外中
  16. C# System.IO.StreamReader
  17. 【Python深入】Python中继承object和不继承object的区别
  18. 深入理解java虚拟机---虚拟机工具jinfo(十五)
  19. Redis简介、安装、配置、启用学习笔记
  20. PHP文本操作

热门文章

  1. 关于gcc内置函数和c隐式函数声明的认识以及一些推测
  2. Yii 之控制器创建使用
  3. laravel 查询构造器
  4. spring boot 文件上传大小配置
  5. java学习笔记总略
  6. 数据库的DDL、DML和DCL的区别与理解
  7. jquery提示消息,简单通用
  8. 在智能手机上跟踪ADS-B系统的飞机航线信息
  9. UVa 12377 - Number Coding
  10. TinyXML学习:TiXmlBase类