nginx+lua(openresty) lua-mongodb 安装及使用(四)

news2024/9/20 20:36:50

前言
前章已经讲述 ua-protobuf 安装及使用
这章主要讲述 openresty 环境下 lua-mongodb 安装及使用

1:环境
ubuntu16(18)
mongodb 3.6

2:安装mongodb 3.6

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
#创建版本列表文件
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

#更新 ubuntu 软件源
sudo apt-get update
#安装最新版mongodb
sudo apt-get install -y mongodb-org

在这里插入图片描述
如果需要安装4.0 前面2句换个即可

#导入 apt 的 key
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
#创建版本列表文件
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

修改 sudo vim /etc/mongod.conf
主要修改了3个地方,storage log net

在这里插入图片描述
mongodb 3.0之后配置文件采用YAML格式,这种格式使用key:value表示
开头使用"空格"作为缩进。
冒号":“之后有value的话,需要紧跟一个空格
如果key只是表示层级,则无需在”:"后增加空格

下面错误是 0.0.0.0 前面少了空格
在这里插入图片描述
下面错误 是 把dbpath log path 放到 $HOME 目录下
在这里插入图片描述
/lib/systemd/system/mongod.service
在这里插入图片描述

sudo chown -R mongodb:mongodb $HOME/mongodb/db
sudo chown -R mongodb:mongodb $HOME/mongodb/log

不建议放到$HOME 目录下

相关命令如下

启动、重启、停止
sudo service mongod start
sudo service mongod restart
sudo service mongod stop

手动启动
sudo mongod --config /etc/mongod.conf
sudo mongod --config /etc/mongod.conf --fork

OK ,成功了
在这里插入图片描述
3:安装lua-mongodb

下载三个依赖 (网不上就手动下载压缩包eg: https://github.com/isage/lua-resty-moongoo)
git clone https://github.com/isage/lua-resty-moongoo.git
git clone git://github.com/mongodb/libbson.git
git clone https://github.com/isage/lua-cbson.git

软件目录
在这里插入图片描述
openresty 安装目录为 $HOME/openresty
软件下载 都放在 $HOME/software

1>下载 lua-resty-moongoo 解压
cd lua-resty-moongoo

cp -r  ./lib/resty/*   $HOME/openresty/lualib/resty

在这里插入图片描述
2> libbson 下载并解压缩
可以先安装下
sudo apt-get install autoconf automake libtool
不然可能会报,看系统是否安装了
ubuntu@ubuntu:~/software/libbson-master$ ./autogen.sh
Error: libtoolize was not found on your system. Cannot continue.
Error: autoreconf not found, please install it.

cd libbson
./autogen.sh 
make
make install
#make clean && make LUA_INCLUDE_DIR=/usr/local/openresty/luajit/include/luajit-2.1 LUA_CMODULE_DIR=/usr/local/openresty/lualib LUA_MODULE_DIR=/usr/local/openresty/lualib CBSON_CFLAGS="-g -fpic -I/usr/local/include/libbson-1.0/ " CC=cc
make clean && make LUA_INCLUDE_DIR=$HOME/openresty/luajit/include/luajit-2.1 LUA_CMODULE_DIR=$HOME/openresty/lualib LUA_MODULE_DIR=$HOME/openresty/lualib CBSON_CFLAGS="-g -fpic -I/usr/local/include/libbson-1.0/ " CC=cc

在这里插入图片描述
在这里插入图片描述
默认安装目录
/usr/local/lib
/usr/local/include/libbson-1.0
在这里插入图片描述
3> lua-cbson下载并解压缩

cd lua-cbson
mkdir build  
cd build  
cmake ..  
make  
make install    ####这里这步没执行,感觉没必要

遇到问题
在这里插入图片描述
修改CMakeList.txt 在
$HOME/software/lua-cbson-master 目录下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把生成的 cbson.so 拷贝到 $HOME/openresty/lualib 目录下
在这里插入图片描述
可以参考上章
在这里插入图片描述
在这里插入图片描述
4:测试脚本
testmongodb.lua

local moongoo = require("resty.moongoo") -- 引入依赖
local cbson = require("cbson") 
local cjson = require("cjson") 
----mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
--local mg, err = moongoo.new("mongodb://root:root@127.0.0.1:27017") -- 创建连接
--[[
local mg, err = moongoo.new("mongodb://127.0.0.1:27017") -- 创建连接
if not mg then
  error(err) -- 如果有错误
 end
local col = mg:db("usermap"):collection("incUserid") -- 选择db和表
--
-- 插入数据

--local ids, err = col:insert({ videoName = "bar",vipVideoPlayUrl= "test"})
mg:close() --关闭连接
--]]
ngx.say(123)

local mg, err = moongoo.new("mongodb://127.0.0.1:27017") -- 创建连接
if not mg then
  error(err) -- 如果有错误
 end
ngx.say(125)

local col = mg:db("usermap"):collection("incUserid") -- 选择db和表
ngx.say(126)
--local  cursor = col:find({})
--local count1 = col:count()

--local res=col:find({ 100843 },{'uid'})   --shell ok
--local res=col:find({ 'uid' },{100843})
local res, err = col:find_one({ uid = 100843})  --shell ok
if res then 

 	if res.uid then
 	  local uid = tonumber(tostring(res.uid))
          ngx.say('uid='..uid)
	end
	if res._id  then
		local id = tostring(res._id)
		ngx.say('id='..id)
	end

	local str = cjson.encode(tostring(res))  --"table: 0x7f4760ba3140"<br/>
	ngx.say(str, "<br/>")
        --ngx.say(res['uid'])
	--ngx.say(res)
end

--[[  above  shell ok
local  cursor = col:find({}) 
if cursor then
   local num,err1 = cursor:count() --num=userdata
  
   if  err1 == nil then
	ngx.say('num not nil='..type(num))
   end
   ngx.say('num='..type(num))
   local n = tonumber(tostring(num))
	ngx.say('n='..n)
end
--]]
ngx.say(127)
--[[
for index,item in cursor:pairs() do
        ngx.say('数据: '..index)

        if not item['url'] then 
                ngx.say('数据:'..item["title"])
        else
                ngx.say('数据:'..item["title"]..item['url'])
                ngx.say(json_decode(item['url']))
        end


end
--]]
--local doc, err = col:find({ "uid" = 100843})
--local doc, err = col:find_one({ foo = "bar"})
--print(doc.uid)
mg:close()

--[[
https://blog.csdn.net/qq_26437925/article/details/50933382
require("a.b.c")

查找a的C library(见过程2.3)
检查它是否有luaopen_a_b_c函数

require("test")
--test.lua
--]]

5:测试结果
在这里插入图片描述

6:DEMO工程 后续如有需要再上传
如果觉得有用,麻烦点个赞,加个收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的初步认识——【初识MySQL】第一节

MySQL的初步认识——【初识MySQL】第一节 文章目录 MySQL的初步认识——【初识MySQL】第一节MySQL简介简介版本MySQL 5.5MySQL 5.6MySQL 5.7MySQL 8.0 安装建议 MySQL的卸载补充操作详情 小技巧 MySQL5.7.17的下载教训 MySQL简介 简介 MySQL是一个开源的关系型数据库管理系统…

【MongoDB】

目录 MongoDB基本简介 MongoDB基本概念 MongoDB和关系数据库的对比 MongoDB数据类型 MongoDB元素命名规则 MongoDB安装部署 MongoDB配置管理 MongoDB服务管理 MongoDB 多实例配置 基本操作 集合 数据备份与恢复 MongoDB复制集集群部署及管理 MongoDB复制集ReplSe…

[PG]生成表注释SQL

由于PostgreSQL无论是表还是字段的注释是通过 comment on语句来处理的。 可通过如下语句生成表的注释SQL执行语句&#xff1a; SELECT CONCAT(COMMENT ON , "type", 模式., "name", IS ", "comment", ";) AS "comment_sql&q…

软考:中级软件设计师:存储管理,分区存储,页式存储,逻辑地址,物理地址

软考&#xff1a;中级软件设计师:存储管理&#xff0c;分区存储 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是…

idea 启动项目 java: Compilation failed: internal java compiler error

1. 首先查看 项目的 编译的 JDK 版本是否是 匹配了或匹配的 2. 堆分配的内存不足导致&#xff0c;如下图位置 堆 构建程序的 堆大小调大

JMeter分布式压测连接Jenkins生成HTML报告时候报错No such file or directory

JMeter-master机器上没有该文件。从官网下载的JMeter都会有该文件&#xff0c;添加进去即可。

C++罕见的纯虚函数调用异常(_purecall abort)

现象 笔者最近遇到了一个诡异的BUG&#xff0c;析构函数执行期间crash&#xff08;VS2022调试器下表现为abort&#xff09;&#xff0c;调用堆栈最后一级是调用虚函数&#xff0c;所有指针变量正常。 更深层的原因和特征隐藏在虚函数表中。abort发生时&#xff0c;虚函数表中…

LNMP架构及部署、skyuc电影网站部署

目录 一、安装nginx 1、关闭防火墙 2.创建管理nginx用户 3.配置nginx 4.命令优化 5.创建nginx脚本 二、安装mysql数据库 三、安装PHP 1.上传php安装包 2.上传 zend-loader-hph5.6 3.创建用户 四、LNMP平台中部署skyuc电影网站 1.解压 SKYUC.v3.4.2.srouce 2.创建数据…

TCP的3次握手和4次挥手

一、3次握手、4次挥手的简单描述 1、3次握手 三次握手&#xff08;Three-way Handshake&#xff09;指建立一个TCP连接时&#xff0c;需要客户端和服务器总共发送3个包。流程简单描述如下图所示&#xff1a; 在socket编程中&#xff0c;客户端执行connect()时&#xff0c;将触…

仿苹果鼠标滚轮控制 文字渐入 淡出效果

废话不多说&#xff0c;上代码&#xff0c;纯jscss3 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

测试服务器CPU情况

要查看服务器的CPU情况&#xff0c;你可以使用 TOP 命令结合一些选项来执行相应的测试top 命令&#xff1a;运行 top 命令可以实时监视系统的各个进程和 CPU 使用情况在 top 命令的输出中&#xff0c;有几个重要的指标参数可以帮助你了解系统的 CPU 使用情况和进程信息。以下是…

2023.07.05java面试总结

1、springboot 怎么创建新的对象 2、sprintboot 怎么引用第三方类 3、list set map 区别 4、jvm常用配置 5、list怎么排序&#xff0c;怎么按多个字段排序 6、io怎么读取文件 7、angular现在使用什么版本&#xff0c;angular入口 项目结构 8、promise用法 9、和equals …

c++11 标准模板(STL)(std::basic_ostream)(七)

定义于头文件 <ostream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式…

安信可蓝牙PB-02 SDK二次开发记录

目录 1.开发环境 & 烧录调试2.例程踩坑(1).编译烧录 watchdog 例程 1.开发环境 & 烧录调试 详细参考下面两篇教程 【安信可PB-01/02模组专题①】PB-01/02模组开发板应用- BLE-UART固件的使用教程 【安信可PB-01/02模组专题③】PB-01/02模组开发板应用-快速入门SDK二次…

代码随想录算法训练营第十天 | 二叉树系列1

二叉树系列1 二叉树理论基础注意点小记二叉树的种类二叉树的存储方式二叉树的遍历 要熟悉自己所用编程语言常用的数据容器的底层实现一定要会自己实现所用数据结构的定义 二叉树的递归遍历递归三部曲前中后序递归遍历前序遍历--我的代码前序遍历--代码随想录的代码中序遍历--我…

【解决】Pyinstaller打包报错IndexError: tuple index out of range

问题 这个问题主要是在Python3.7以上的版本中遇到&#xff0c;用pyinstaller打包的时候发现报错 /usr/local/lib/python3.10/dis.py argval const_list[const_index], IndexError: tuple index out of range解决方案 vim 进入报错的文件&#xff0c;/usr/local/lib/python…

Css 基础:选择器,三大特性

1.emmet的 快速格式化代码 配置 "editor.formatOnType": true, "editor.formatOnSave": true 2.基础选择器 3.复合选择器 4.单行文本垂直居中原理 5.css背景 6.CSS三大特性 层叠性&#xff1a;相同选择器设置相同样式&#xff0c;发生在样式冲突时&#xf…

VUE:el-button里面的倒计时显示,验证码发送后两分钟倒计时

验证码倒计时显示 框架需求样式图代码template部分script部分style部分部分内容解读 框架 UI&#xff1a;elementUI 前端&#xff1a;vue 需求 发送验证码后&#xff0c;2分钟内不可以在发送&#xff0c;button置灰&#xff0c;120s后可以点击重新发送验证码 样式图 代码 …

【算法设计与分析】拉丁矩阵问题——对于给定的m和n,计算出不同的宝石排列方案数。

问题描述 现有n种不同形状的宝石&#xff0c;每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵&#xff0c;m≤n&#xff0c;使矩阵中每行和每列的宝石都没有相同的形状。试设计一个算法&#xff0c;计算出对于给定的m和n&#xff0c;有多少种不同的宝石排列方案。 数…

Java 基础进阶篇(三):权限修饰符、final 关键字与枚举

文章目录 一、权限修饰符二、final 关键字2.1 final 作用2.2 final 修饰变量举例2.3 常量三、枚举3.1 枚举的格式3.2 枚举的特征3.3 枚举的应用 一、权限修饰符 权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符&#xff1a; 有四种作用范围由小到大 (priv…