Flask Redis 服务器会话:保存会话时出现错误

5

大家好:

我正在将我的Flask应用程序与Redis用作会话存储移动到Docker容器中。当Redis在本地运行时,我的应用程序可以愉快地运行。然而,在使用Redis镜像运行docker-compose时,我出现了以下错误。无论我的Redis容器是运行还是停止状态,我都会收到相同的错误:

2017-04-02 03:36:09,861] ERROR in app: Exception on / [GET]
web_1    | Traceback (most recent call last):
web_1    |   File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app
web_1    |     response = self.full_dispatch_request()
web_1    |   File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1643, in full_dispatch_request
web_1    |     response = self.process_response(response)
web_1    |   File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1864, in process_response
web_1    |     self.save_session(ctx.session, response)
web_1    |   File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 926, in save_session
web_1    |     return self.session_interface.save_session(self, session, response)
web_1    |   File "/usr/local/lib/python2.7/site-packages/flask_session/sessions.py", line 165, in save_session
web_1    |     self.redis.setex(name=self.key_prefix + session.sid, value=val,
web_1    | AttributeError: 'str' object has no attribute 'setex'

我已经为会话配置向我的应用程序添加了以下配置属性:

SESSION_TYPE = "redis"
SESSION_REDIS = "redis:6379"

我认为这不是一个docker-compose的问题,因为我的应用程序可以成功连接到MySQL实例,但以下是我的docker-compose.yml文件,以防它指向某些问题:

version: "3"
services:
  mysql:
    build:
      context: db/
  web:
    build:
      context: web/
    ports:
    - "10080:80"
    depends_on:
    - "mysql"
    - "redis"
  redis:
    image: "redis:alpine"
2个回答

8
找到问题了。问题出在会话配置中。我必须进行更改。
SESSION_REDIS = "redis:6379"

为了

SESSION_REDIS = redis.Redis("redis")

1
同时保持接受你的答案的习惯,而不是让它保持在Stackoverflow上开放。 - LuFFy
1
嗨@LuFFy,只是确认一下,推荐的做法是接受我的答案而不是保持开放状态?看起来我必须等待8个小时才能接受我的答案,所以我会在那时尝试。 - Raj
2
我现在遇到了这个问题,你需要明确地告知默认的主机和服务器才能解决这个“问题” - 'SESSION_REDIS': redis.Redis(host='localhost', port=6379), - user7075574

0

这个对我有用:

from flask import Flask, session
from flask_session import Session
import redis

app = Flask(__name__)

# Load the config file
app.config.from_pyfile('config.cfg')

# Create and initialize the Flask-Session object 
app.config['SESSION_REDIS'] = redis.from_url(app.config['REDIS_URL'])
server_session = Session(app)

config.cfg

REDIS_URL = 'redis://:p1ba23....'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接