星星 发布的文章

openresty 学习笔记小结:综合应用实例

这个综合实验实现的功能其实很简单,用户访问一个页面,显示一个默认页面。输入参数(post或者get都可以),如果参数在数据库查询得到并满足一定条件,根据数据库记录的类型调转到不同页面,并记录下访问者的IP并记录到数据库,参数不符合要求返回默认页面。

其实也就用到之前记录下的那些功能点,这个实验也就被用在本网的www入口

- 阅读剩余部分 -

GIT操作小结,更新forked出来的项目和使用子模块

GIT操作小结,从一般常用操作,到有时候我们fork一个项目(比如本博就是fork了typecho)并做些修改提交,而原项目也做了些更新,修复了一下BUG等,那我希望跟随原项目更新的操作,还有子模块的使用,比如我是把自己写的主题和插件作为子模块添加,子模块都是放在oschina的私有库,那么这里需要添加子模块的操作和在拉取项目时把子模块也一起拉下来(这样也才可以运用到上篇写的自动部署)

- 阅读剩余部分 -

通过GIT自动部署代码到服务器

代码提交需要版本控制,一方面是协同开发所必须,一方面也是可以有效做到代码保全和版本回退,再高级点还是可以通过分支或者子模块的形式减少重复工作量。

但代码开发完成后进行服务器部署的过程中,或者在生产过程中遇到需要紧急进行修改的情况下,又如何保证代码的完整性,和确保开发人员有对临时改动进行记录和准备好改动的回退方法。

GIT作为功能强大的版本控制工具,提供了Webhooks和Deploy Keys的功能,可以轻松实现通过git进行服务器部署。同时因为如果部署代码都是通过GIT进行提交,也有效的保证了代码的完整性和可回退。下面以gitlab为例记录具体的实现方法

- 阅读剩余部分 -

openresty 学习笔记番外篇:python的一些扩展库

要写一个可以使用的python程序还需要比如日志输出,读取配置文件,作为守护进程运行等

读取配置文件

使用自带的ConfigParser模块

import os
import ConfigParser

获取配置文件路径并进行读取

path = os.path.realpath(__file__)
path = os.path.dirname(path)
configPath = path + '/config.cfg'

config = ConfigParser.ConfigParser()
config.read(configPath)

使用方法

agentConfig = {}
agentConfig['MYSQLport'] = config.get('MySQL', 'port')

- 阅读剩余部分 -

openresty 学习笔记番外篇:python访问RabbitMQ消息队列

python使用pika扩展库操作RabbitMQ的流程梳理。

  1. 客户端连接到消息队列服务器,打开一个channel。
  2. 客户端声明一个exchange,并设置相关属性。(可以省略,不过必须保证所指定的交换器存在)
  3. 客户端声明一个queue,并设置相关属性。(可以省略,不过必须保证所指定的队列存在)
  4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。(可以省略,不过必须保证其绑定关系)

作为生产者
客户端投递消息到exchange。

作为消费者
客户端通过队列接收消息,处理后进行应答。

- 阅读剩余部分 -

openresty 学习笔记四:连接mysql和进行相关操作

毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库。比如首次查询数据在redis查询不到则查询mysql,再将查询结果写过redis供下次查询。保存数据也可以先写入redis再通过队列使用另外的程序异步写入mysql。

后面会逐步把openresty写入rabbitmq和python通过订阅rabbitmq的队列将数据写入mysql得方法都整理一下。

先看看openresty如何对mysql进行连接和操作,并进行二次封装

- 阅读剩余部分 -