We use redis with django-rq to manage queues on our project. Heroku has recently forced upgrades to Redis 7.0.11 and that requires TLS. Per their docs we need to set 'ssl_cert_reqs'=None
in order to make sure redis is using TLS but not looking for a cert.
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": os.environ.get('REDIS_URL'),
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {
"ssl_cert_reqs": None
},
}
}
}
Setting the above in my project's settings.py results in the following error:
TypeError at /login/ __init__() got an unexpected keyword argument 'ssl_cert_reqs'
Other settings like "max_connections": 5
don't cause an error. I've been searching and I haven't seen anyone else with this issue. Has anyone else run across this issue and hopefully a fix?
We're using:
Django==2.2.28
django-redis==5.2.0
django-rq==2.8.1
redis==4.5.5
rq==1.15.1
It also fails on another build we have:
Django==3.0.14
django-redis==5.2.0
django-rq==2.8.1
redis==4.6.0
rq==1.15.1
We've tried configuring our project with multiple builds of Django
, django-redis
, django-rq
, redis
, and rq
with no luck.
EDIT: Added the full traceback:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/login/?next=/dashboard/send/
Django Version: 2.2.28
Python Version: 3.7.17
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sendapp.stream',
'storages',
'debug_toolbar',
'django_rq',
'rest_framework',
'oauth2_provider',
'corsheaders']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware']
Traceback:
File "/usr/local/lib/python3.7/site-packages/redis/connection.py" in get_connection
1450. connection = self._available_connections.pop()
During handling of the above exception (pop from empty list), another exception occurred:
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapper
45. return bound_method(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
76. return view(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapper
45. return bound_method(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view
142. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapper
45. return bound_method(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/views.py" in dispatch
61. return super().dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py" in dispatch
97. return handler(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/views/generic/edit.py" in post
142. return self.form_valid(form)
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/views.py" in form_valid
90. auth_login(self.request, form.get_user())
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/__init__.py" in login
108. request.session.cycle_key()
File "/usr/local/lib/python3.7/site-packages/django/contrib/sessions/backends/base.py" in cycle_key
297. self.create()
File "/usr/local/lib/python3.7/site-packages/django/contrib/sessions/backends/cache.py" in create
43. self._session_key = self._get_new_session_key()
File "/usr/local/lib/python3.7/site-packages/django/contrib/sessions/backends/base.py" in _get_new_session_key
152. if not self.exists(session_key):
File "/usr/local/lib/python3.7/site-packages/django/contrib/sessions/backends/cache.py" in exists
70. return bool(session_key) and (self.cache_key_prefix + session_key) in self._cache
File "/usr/local/lib/python3.7/site-packages/django/core/cache/backends/base.py" in __contains__
212. return self.has_key(key)
File "/usr/local/lib/python3.7/site-packages/django_redis/cache.py" in _decorator
31. return method(self, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django_redis/cache.py" in has_key
137. return self.client.has_key(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django_redis/client/default.py" in has_key
664. return client.exists(key) == 1
File "/usr/local/lib/python3.7/site-packages/redis/commands/core.py" in exists
1708. return self.execute_command("EXISTS", *names)
File "/usr/local/lib/python3.7/site-packages/redis/client.py" in execute_command
1266. conn = self.connection or pool.get_connection(command_name, **options)
File "/usr/local/lib/python3.7/site-packages/redis/connection.py" in get_connection
1452. connection = self.make_connection()
File "/usr/local/lib/python3.7/site-packages/redis/connection.py" in make_connection
1492. return self.connection_class(**self.connection_kwargs)
File "/usr/local/lib/python3.7/site-packages/redis/connection.py" in __init__
956. super().__init__(**kwargs)
Exception Type: TypeError at /login/
Exception Value: __init__() got an unexpected keyword argument 'ssl_cert_reqs'