如何在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或者修改启动脚本来实现的方式,具体参考链接。
如何在cowboy应用中指定mnesia数据库路径的更多相关文章
- 如何在google test中指定只运行一部分测试
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在google test中指定只运行一部分测试.
- 如何在Android Studio中指定NDK位置?
如何在Android Studio中指定NDK位置? 问题描述 NDK已经手工下载解包在本地: D:\Portable\android-ndk-r13b 每次创建支持C++项目时,都提示NDK没配置, ...
- 如何在Asp.net中备份Access数据库?
public void Create( string mdbPath ) { if( File.Exists(mdbPath) ) //检查数据库是否已存在 { thr ...
- 如何在AbpNext项目中使用Mysql数据库
配置步骤: 1.更改.Web项目的appsettings.json的数据库连接字符串.如:server=0.0.0.0;database=VincentAbpTest;uid=root;pwd=123 ...
- 如何在centos6.5中安装MySQL数据库
huidaoli 东华理工大学信工IT网-项目1+1学习基地(www.ecit-it.com)
- 远程连接ejabberd的mnesia数据库
由于服务器是server版本,所以很难直观的看到mnesia的数据.所以对于初学者来说非常的困惑. 特地在qq群中请教了别人.别人说只要pong通了就行,就能通过rpc去操作远程的mnesia数据库. ...
- 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET
今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...
- 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件
查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求. 内容 查找符号 (.pdb) 文件 查找源文件 查找符号 (.pdb) 文件 说明 在之前的 Vis ...
- Kafka深度解析(如何在producer中指定partition)(转)
原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...
随机推荐
- 标准C程序设计七---03
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 2017 ACM/ICPC 广西邀请赛 题解
题目链接 Problems HDOJ上的题目顺序可能和现场比赛的题目顺序不一样, 我这里的是按照HDOJ的题目顺序来写的. Problem 1001 签到 #include <bits/std ...
- SPOJ MIXTURES 区间dp
Harry Potter has n mixtures in front of him, arranged in a row. Each mixture has one of 100 differen ...
- SQL视图优化改写为存储过程遇到 双引号 单引号问题
核心在于拼接SQL字符串中遇到中文双引号问题: 可以使用系统函数 替换掉set @pageStr = replace(@queryStr,'"','''') 不过更推荐 使用两个单 ...
- 【Todo】RTP/RTCP/RTSP/SIP/SDP 等多媒体传输和会话协议
参考 http://m.blog.csdn.net/article/details?id=6211447
- 用df命令显示磁盘使用量和占用率。
使用“df -k”命令,以k为单位显示磁盘使用量和占用率. root@gsg43:/tmp# df -kFilesystem 1K-blocks Used Available Use% ...
- 微信小程序 - 提取字体图标与其优化
微信小程序,无论是字体图标还是图标,都差不多,只不过是为了以后字体图标修改方便,或者加效果方便而使用它而已! 1. 下载font-awesome http://fontawesome.dashgame ...
- Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin)
近期在appfuse看到使用webtest-maven-plugin实现Web应用的集成測试,研究了下.感觉很不错.对于Web应用自己主动构建很有帮助,在性能測试之前能够保证Web应用的基本功能工作正 ...
- Windows下也能够使用osw追朔系统历史性能
1.Windows系统历史性能分析困难背景 在Linux/Unix上.要追朔历史性能,一般採用部署nmon进行性能监控採集与存储的方式实现.可是却没有在Windows上的版本号. Windows系统假 ...
- 中科燕园GIS外包---交通运输综合地理信息平台
集地图.服务.应用于一身交通运输综合性的GIS门户 交通运输综合地理信息平台,是集地图.服务.应用于一身交通运输综合性的GIS门户.无需复杂的设置和部署,就可以高速创建交互式地图和应用程序,并 ...