1
resposta

[Bug] AttributeError: 'str' object has no attribute 'copy'

Ao configurar o redis no settings.py com as seguintes linhas

CACHES = {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379/1",
    "OPTIONS": {
        "CLIENT_CLASS": "django_redis.client.DefaultClient"
    }
}

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = "default"

passei a receber o erro abaixo ao rodar o runserver

Watching for file changes with StatReloader
Performing system checks...

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Python311\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "C:\Python311\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\core\management\commands\runserver.py", line 133, in inner_run
    self.check(display_num_errors=True)
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\core\management\base.py", line 485, in check
    all_issues = checks.run_checks(
                 ^^^^^^^^^^^^^^^^^^
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\core\checks\registry.py", line 88, in run_checks        
    new_errors = check(app_configs=app_configs, databases=databases)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\core\checks\caches.py", line 65, in check_file_based_cache_is_absolute
    cache = caches[alias]
            ~~~~~~^^^^^^^
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\utils\connection.py", line 62, in __getitem__
    conn = self.create_connection(alias)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\GitHub\fenix\python-django-drf-escola-projeto_inicial-master\venv\Lib\site-packages\django\core\cache\__init__.py", line 43, in create_connection  
    params = self.settings[alias].copy()
             ^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'copy'

Estou utilizando Windows e instalei o Redis utilizando a última imagem oficial do Redis para Docker.

Alguma pista do que pode estar acontecendo?

Obrigado!

1 resposta

Olá Antonio! Tudo ok contigo?

Parece que o erro 'str' object has no attribute 'copy' está sendo causado porque o Django está esperando um dicionário para a configuração do cache, mas está recebendo uma string.

No seu caso, você definiu SESSION_CACHE_ALIAS = "default", que é uma string, mas o Django espera um dicionário para essa configuração.

Uma possível solução para o problema seria alterar a configuração do SESSION_CACHE_ALIAS para apontar para a configuração do cache que você definiu. No seu caso, você pode tentar algo como:

SESSION_CACHE_ALIAS = CACHES

Isso fará com que o Django use a configuração do cache que você definiu em CACHES para a sessão.

Era isso. Espero ter ajudado!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor marque ele como solução! ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software