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

如何在cowboy应用中指定mnesia数据库路径的更多相关文章

  1. 如何在google test中指定只运行一部分测试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在google test中指定只运行一部分测试.

  2. 如何在Android Studio中指定NDK位置?

    如何在Android Studio中指定NDK位置? 问题描述 NDK已经手工下载解包在本地: D:\Portable\android-ndk-r13b 每次创建支持C++项目时,都提示NDK没配置, ...

  3. 如何在Asp.net中备份Access数据库?

    public   void   Create(   string   mdbPath   ) { if(   File.Exists(mdbPath)   )   //检查数据库是否已存在 { thr ...

  4. 如何在AbpNext项目中使用Mysql数据库

    配置步骤: 1.更改.Web项目的appsettings.json的数据库连接字符串.如:server=0.0.0.0;database=VincentAbpTest;uid=root;pwd=123 ...

  5. 如何在centos6.5中安装MySQL数据库

    huidaoli 东华理工大学信工IT网-项目1+1学习基地(www.ecit-it.com)

  6. 远程连接ejabberd的mnesia数据库

    由于服务器是server版本,所以很难直观的看到mnesia的数据.所以对于初学者来说非常的困惑. 特地在qq群中请教了别人.别人说只要pong通了就行,就能通过rpc去操作远程的mnesia数据库. ...

  7. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  8. 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件

    查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求.   内容 查找符号 (.pdb) 文件 查找源文件   查找符号 (.pdb) 文件 说明 在之前的 Vis ...

  9. Kafka深度解析(如何在producer中指定partition)(转)

    原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...

随机推荐

  1. (12)java -IDEA使用

    一. 引入jar包 1. 2.

  2. TCP/IP 协议栈

    TCP(传输控制协议) 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 在因特 ...

  3. 《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  4. 如何细粒度地控制你的MyBatis二级缓存(mybatis-enhanced-cache插件实现)

    前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能.本文就是从问题入手,一步步分析现存的MyBa ...

  5. jmeter自定义并发用户数图形插件介绍

    Stepping Thread Group马上要被废弃了,废弃原因不知道,官方推荐使用 BlazeMeter Inc.公司贡献的插件Concurrency Thread Group,配合 Throug ...

  6. 一步步走向国际乱码大赛-- 恶搞C语言

    大家都一直强调规范编码.可是这个世界上有个大师们娱乐的竞赛--国际乱码大赛. 能写出来的都是对语言深入了解的master.我从没想自己也能"恶搞"C,一直都是老老实实编码.就在前几 ...

  7. METEOR_PACKAGE_DIRS 无效

    windows中设置METEOR_PACKAGE_DIRS不起作用,一直提示找不到PACKAGES的原因. METEOR_PACKAGE_DIRS设置的路径太长了. 在系统属性 -->高级--& ...

  8. 【Todo】已经打开的页面需要清掉的坑

    下面是当前我浏览器里面打开的技术文章.需要清掉.一个坑一个坑地填吧. 微信文件传输里面也有几篇12.6号的<Akuna Capital电面面经><2016最流行的Java EE服务器 ...

  9. 安卓自己定义View进阶-Canvas之绘制基本形状

    Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zh ...

  10. Our happy ending

    题目链接 题意: 输入n.k.L,n个数,最大值不超过L,在序列中取若干个数和能达到k的序列个数 n,k<=20 , 0<=L<=10^9 分析: 题目关键在于和k比較小,所以能够考 ...