Docker下Python Flask+Redis+MySQL+RQ队列简单配置
本篇博文主要讲解Docker下使用RQ队列的通信配置,主要是网上的部分文章写的不太清楚,特写一篇
作者使用docker-compose.yml文件调度各部分文件Dockerfile,起初是这样写的
version: '3'
services:
redis:
image: "redis"
restart: always
environment:
- TZ=Asia/Shanghai
mysql:
build: ./mysql
environment:
- TZ=Asia/Shanghai
- MYSQL_DATABASE=SZheScan
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
restart: always
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
]
web:
build: .
ports:
- "5000:5000"
links:
- mysql:mysql
- redis:redis
depends_on:
- mysql
restart: always
environment:
- TZ=Asia/Shanghai
rq:
build: .
depends_on:
- redis
- web
command: "rq worker"
restart: always
environment:
- TZ=Asia/Shanghai
关键点在于rq部分:
rq:
build: .
depends_on:
- redis
- web
command: "rq worker"
restart: always
environment:
- TZ=Asia/Shanghai
使用command命令启动RQ队列:
command: "rq worker"
在Flask的配置文件config.py中如下编写:
import os
import redis
from rq import Queue '''
配置文件:
debug=true
secret_key,session中的24位随机盐值
MySQL数据库配置
数据库名为SZheScan
python3:https://blog.csdn.net/qq562029186/article/details/81325074
'''
DEBUG = False
SECRET_KEY = os.urandom(24) HOSTNAME='mysql'
# HOSTNAME='127.0.0.1'
PORT = '3306'
DATABASE = 'SZheScan'
USERNAME = 'root'
PASSWORD = 'root'
# SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1/tushare?charset=utf8'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT,
DATABASE) SQLALCHEMY_TRACK_MODIFICATIONS = False HOST = 'redis'
# HOST = '127.0.0.1'
redisPool = redis.ConnectionPool(host=HOST, port=6379, db=0, decode_responses=True)
db = redis.Redis(host=HOST, port=6379, db=0, decode_responses=True)
queue = Queue(connection=db)
除了引入关键的库文件之外,RQ队列关键代码在:
db = redis.Redis(host=HOST, port=6379, db=0, decode_responses=True)
queue = Queue(connection=db)
注意,这里链接的HOST不能是本地127.0.0.1,而是redis,而redis实际上是docker-compose.yaml文件里面redis的服务名,也就是redis服务,这样才能正常通信。
接着使用docker-compose up 启动服务,但是出现了报错为:
Error 99 connecting to localhost:6379. Cannot assign requested address
虽然国内部分人给出了解决方案,但是并不太具体,在stackoverflow社区上找到了其中一个解决方案:https://stackoverflow.com/questions/54965291/error-99-connecting-to-localhost6379-cannot-assign-requested-address
事实上,这个解决方案,解决的问题是前面我们提到的,HOST主机修改为redis服务名的问题,但是当我这样修改了之后,并且重新建立了镜像,还是会出现同样的报错。
在查阅了相关的资料之后,作者才发现,原来RQ队列默认链接的就是本地的Redis数据库,即localhost:6379,虽然我们在配置文件,即config.py里面写了:
db = redis.Redis(host=HOST, port=6379, db=0, decode_responses=True)
但是RQ队列并不会智能到自动链接redis Docker服务,最终还是一次又一次去尝试链接localhost:6379,这也是为什么Docker的报错里面会出现localhost:6379的原因。
解决方法为,docker-compose.yml启动文件中,RQ队列启动command命令指定配置文件启动
简单介绍一下咋编写配置文件及启动服务,更详细的可以去查看其他博主的RQ队列配置文件编写
首先编写一个rqsettings.py文件:
# 你也可以指定使用的redis数据库
REDIS_HOST = 'redis'
REDIS_PORT = 6379
REDIS_DB = 0
# REDIS_PASSWORD = 'very secret' # 监听的队列
QUEUES = ['high', 'default', 'low']
可以看到在这里我们指定的是redis主机,即docker-compose.yml文件中redis docker的服务名,在stackoverflow解决方案上,也是想表达改为docker redis的服务名。
接着在config.py中,还是象征性改一下:
import os
import redis
from rq import Queue
import rqsettings '''
配置文件:
debug=true
secret_key,session中的24位随机盐值
MySQL数据库配置
数据库名为SZheScan
python3:https://blog.csdn.net/qq562029186/article/details/81325074
'''
DEBUG = False
SECRET_KEY = os.urandom(24) HOSTNAME='mysql'
# HOSTNAME='127.0.0.1'
PORT = '3306'
DATABASE = 'SZheScan'
USERNAME = 'root'
PASSWORD = 'root'
# SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1/tushare?charset=utf8'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT,
DATABASE) SQLALCHEMY_TRACK_MODIFICATIONS = False HOST = 'redis'
# HOST = '127.0.0.1'
redisPool = redis.ConnectionPool(host=HOST, port=6379, db=0, decode_responses=True)
db = redis.Redis(host=rqsettings.REDIS_HOST, port=rqsettings.REDIS_PORT, db=rqsettings.REDIS_DB, decode_responses=True)
queue = Queue(connection=db)
其实这个改不改都行,RQ指定host和端口改为了调用rqsettings文件而已。
最关键的在于指定配置文件启动,修改docker-compose.yml文件为
version: '3'
services:
redis:
image: "redis"
restart: always
environment:
- TZ=Asia/Shanghai
mysql:
build: ./mysql
environment:
- TZ=Asia/Shanghai
- MYSQL_DATABASE=SZheScan
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
restart: always
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
]
web:
build: .
ports:
- "5000:5000"
links:
- mysql:mysql
- redis:redis
depends_on:
- mysql
restart: always
environment:
- TZ=Asia/Shanghai
rq:
build: .
depends_on:
- redis
- web
command: "rq worker -c rqsettings"
restart: always
environment:
- TZ=Asia/Shanghai
关键代码为:
command: "rq worker -c rqsettings"
即使用
rq worker -c rqsettings
-c 参数指定配置文件
需要注意的是,配置文件实际上为rqsettings.py,是存在.py后缀的,但是在-c指定的时候,是不需要加上.py后缀指定的。
然后删除掉之前错误建立的镜像,重新更新一下本地的docker,对于这个问题,即:
Error 99 connecting to localhost:6379. Cannot assign requested address
应该就可以正常解决了。
祝好
Docker下Python Flask+Redis+MySQL+RQ队列简单配置的更多相关文章
- ubuntu下python flask环境搭建
ubuntu下python flask环境搭建 1. 安装pip sudo apt-get install python-dev pyhton-pip 2. 安装virtualenv sudo apt ...
- [评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)
[评测]低配环境下,PostgresQL和Mysql读写性能简单对比 原文链接:https://www.cnblogs.com/blog5277/p/10658426.html 原文作者:博客园--曲 ...
- python——flask常见接口开发(简单案例)
python——flask常见接口开发(简单案例)原创 大蛇王 发布于2019-01-24 11:34:06 阅读数 5208 收藏展开 版本:python3.5+ 模块:flask 目标:开发一个只 ...
- Linux安装MariaDB(Mysql)和简单配置 mariadb
Linux安装MariaDB(Mysql)和简单配置 1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动Ma ...
- Laravel5.4 队列简单配置与使用
概述 什么是队列? 百度百科是这样说的 “队列”是在传输过程中保存数据的容器. 举几个生活中例子: * iphone手机新款发布,三里屯iphone进的新货.大家要排队买,不能说一大堆人一起冲进去,那 ...
- windows下python+flask环境配置详细图文教程
本帖是本人在安装配置python和flask环境时所用到的资源下载及相关的教程进行了整理罗列,来方便后面的人员,省去搜索的时间.如果你在安装配置是存在问题可留言给我. 首先罗列一下python+fla ...
- docker下tomcat连redis
之前已经讲了然后通过Maven 项目管理工具创建Web项目, 最后打包成War包 讲了docker 配置 Tomcat , Redis 现在讲如何使用War包,以及在docker下, 让jsp连上re ...
- Linux安装MariaDB(Mysql)和简单配置
1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...
- python的IDE(pycharm)安装以及简单配置
使用IDE的好处 界面更友好,看起来更舒服 智能提示功能很赞,大大提高开发效率 pycharm的安装过程 去pycharm官网下载安装包,请下载专业版,建议不要去网上下载汉化版 点击安装包一直下一步即 ...
随机推荐
- 软件工程作业--ATM自助银行服务系统
博客班级 AHPU软件工程 作业要求 ATM自助银行服务系统 作业目标 编码实现ATM自助银行服务系统 学号 3180701118 目录 一.作业要求 二.代码及运行界面 1.test类 2.User ...
- 《GNU_makefile》第五章——为规则书写命令
1. 使用make的命令行参数-n或--just-print,make会只显示要执行的命令,不执行,这样方便调试makefile. 2.执行命令 每写一行命令,make会fork出一个shell进程来 ...
- python之ftp与paramiko与hasattr与getattr
为了方便树莓派和电脑上相互传输数据文件的传输.也就是上传和下载文件,我自己就写了一个ftp 主要是运用到hasattr与getattr 先看一下服务器上的程序吧 # _*_coding:utf-8_* ...
- ceph的jewel新支持的rbd-nbd
jewel版本新增加了一个驱动NBD,允许librbd实现一个内核级别的rbd NBD相比较于kernel rbd: rbd-ko是根据内核主线走的,升级kernel rbd需要升级到相应的内核,改动 ...
- DOS基本命令(Windows下的基本命令部分)
一.cls(clear screen的简写) 命令作用:清屏屏幕 详细介绍:屏幕显示的所有字符信息都是存放在一个屏幕缓冲区中,cls命令的作用是清除屏幕上的文字,并将该缓冲区清空. 二.dir(dir ...
- html 小米商城导航栏示例
1.小米导航栏示例 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&q ...
- 源码分析:CountDownLatch 之倒计时门栓
简介 CountDownLatch 是JDK1.5 开始提供的一种同步辅助工具,它允许一个或多个线程一直等待,直到其他线程执行的操作完成为止.在初始化的时候给定 CountDownLatch 一个计数 ...
- Nginx下关于缓存控制字段cache-control的配置说明
HTTP协议的Cache -Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程.请求时的缓存指令包括: no ...
- [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)
简介 原题复现: 考察知识点:无参数命令执行.Fuzz 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...
- MYSQL渗透测试
部分来源于:先知社区 MYSQL-getshell篇 通过日志getshell 查看日志的物理路径(绝对路径) show variables like '%general%'; 打开日志记录内容 se ...