当前位置: 首页 > news >正文

如何在cowboy应用中指定mnesia数据库路径

创建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或者修改启动脚本来实现的方式,具体参考链接。

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

相关文章:

  • underscore 的debounce
  • Maven项目pom.xml文件简单解析
  • 菜鸟学Python之django-simple-captcha使用
  • Swift Collection 中的 lazy 作用
  • Activiti用户任务分配
  • 2 使用unitest 模块扩展功能测试
  • 免费学习coursera的课程的操作办法
  • SylixOS Lite版本中断优先级设置
  • 小程序的iphoneX判断
  • 还在担心机器人?人工智能目前水平还不如初中生
  • linux多网卡绑定聚合-Bond详细完整版
  • HDU_1237_简单计算器
  • Docker基础技术:DeviceMapper
  • Docker社区版中Kubernetes开发
  • 云栖科技评论第38期:亚马逊推出时尚智能助手Echo Look
  • [deviceone开发]-do_Webview的基本示例
  • [笔记] php常见简单功能及函数
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【知识碎片】第三方登录弹窗效果
  • egg(89)--egg之redis的发布和订阅
  • golang 发送GET和POST示例
  • Hibernate【inverse和cascade属性】知识要点
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Mac转Windows的拯救指南
  • PHP 的 SAPI 是个什么东西
  • React的组件模式
  • Tornado学习笔记(1)
  • Travix是如何部署应用程序到Kubernetes上的
  • 创建一个Struts2项目maven 方式
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 关于Flux,Vuex,Redux的思考
  • 机器学习学习笔记一
  • 开源SQL-on-Hadoop系统一览
  • 积累各种好的链接
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​马来语翻译中文去哪比较好?
  • # .NET Framework中使用命名管道进行进程间通信
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #预处理和函数的对比以及条件编译
  • $(selector).each()和$.each()的区别
  • ${factoryList }后面有空格不影响
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (33)STM32——485实验笔记
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Windows2003安全设置/维护
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ./和../以及/和~之间的区别
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .gitattributes 文件
  • .NET MVC 验证码
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)