gaiacoop / django-huey

A django integration for huey task queue that supports multi queue management
MIT License
67 stars 5 forks source link

Connection refused #16

Closed edmundrotimi closed 1 year ago

edmundrotimi commented 1 year ago

I keep getting a connection refused each time I run Django Huey in production setup. It works fine locally. I am using a supervisor for the background task:

task.conf

        [program:model]
        command=/home/user/apps/venv/bin/python /home/user/apps/project-dir/manage.py djangohuey --queue model_cleanup
        user=user
        autostart=true
        autorestart=true
        redirect_stderr = true                                               
        stdout_logfile = /etc/supervisor/realtime.log  

        [program:link]
        command=/home/user/apps/venv/bin/python /home/user/apps/project-dir/manage.py djangohuey --queue link_model_cleanup
        user=user
        autostart=true
        autorestart=true
        redirect_stderr = true                                               
        stdout_logfile = /etc/supervisor/realtime.log  

supervisord.conf

        [unix_http_server]
        file=/var/run/supervisor.sock   
        chmod=0700                       

        [supervisord]
        logfile=/var/log/supervisor/supervisord.log 
        pidfile=/var/run/supervisord.pid 
        childlogdir=/var/log/supervisor          

        [rpcinterface:supervisor]
        supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

        [supervisorctl]
        serverurl=unix:///var/run/supervisor.sock

        [include]
        files = /etc/supervisor/conf.d/*.conf

        [inet_http_server]
        port=127.0.0.1:9001

        [rpcinterface:supervisor]
        supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterfac

settings.py

    'model_cleanup': {#this name will be used in decorators below
        'huey_class': 'huey.RedisHuey',
        'name': 'model_cleanup_task',
        'immediate': False,
        'consumer': {
            'workers': 10,
            'worker_type': 'greenlet',
            "scheduler_interval": 60,  # Check schedule every second, -s.
            "periodic": True,
        },
    },

    'link_model_cleanup': {#this name will be used in decorators below
        'huey_class': 'huey.RedisHuey',
        'name': 'link_model_cleanup_task',
        'immediate': False,
        'consumer': {
            'workers': 10,
            'worker_type': 'greenlet',
            "scheduler_interval": 60,  # Check schedule every second, -s.
            "periodic": True,
        },
    },

error

[2023-05-30 11:41:23,012] INFO:huey.consumer:MainThread:Huey consumer started with 10 greenlet, PID 450760 at 2023-05-30 09:41:23.012203 [2023-05-30 11:41:23,017] INFO:huey.consumer:MainThread:Scheduler runs every 1 second(s). [2023-05-30 11:41:23,017] INFO:huey.consumer:MainThread:Periodic tasks are enabled. [2023-05-30 11:41:23,018] INFO:huey.consumer:MainThread:The following commands are available:

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/home/user/pyapps/venv/lib/python3.10/site-packages/huey/consumer.py", line 160, in loop task_list = self.huey.read_schedule(now) File "/home/user/pyapps/venv/lib/python3.10/site-packages/huey/api.py", line 576, in read_schedule for task in self.storage.read_schedule(timestamp)] File "/home/user/pyapps/venv/lib/python3.10/site-packages/huey/storage.py", line 448, in read_schedule tasks = self._pop(keys=[self.schedule_key], args=[unix_ts]) File "/home/user/pyapps/venv/lib/python3.10/site-packages/redis/commands/core.py", line 5807, in call return client.evalsha(self.sha, len(keys), args) File "/home/user/pyapps/venv/lib/python3.10/site-packages/redis/commands/core.py", line 5194, in evalsha return self._evalsha("EVALSHA", sha, numkeys, keys_and_args) File "/home/user/pyapps/venv/lib/python3.10/site-packages/redis/commands/core.py", line 5178, in _evalsha return self.execute_command(command, sha, numkeys, *keys_and_args) File "/home/user/pyapps/venv/lib/python3.10/site-packages/redis/client.py", line 1255, in execute_command conn = self.connection or pool.get_connection(command_name, **options) File "/home/user/pyapps/venv/lib/python3.10/site-packages/redis/connection.py", line 1442, in get_connection connection.connect() File "/home/user/pyapps/venv/lib/python3.10/site-packages/redis/connection.py", line 704, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused. [2023-05-30 11:41:23,627] INFO:huey.consumer:MainThread:Huey consumer started with 10 greenlet, PID 450761 at 2023-05-30 09:41:23.627188 [2023-05-30 11:41:23,637] INFO:huey.consumer:MainThread:Scheduler runs every 1 second(s). [2023-05-30 11:41:23,637] INFO:huey.consumer:MainThread:Periodic tasks are enabled. [2023-05-30 11:41:23,638] INFO:huey.consumer:MainThread:The following commands are available:

Craxti commented 1 year ago

There may be a problem starting the port, and specifically that it is closed or is already being used by something else

edmundrotimi commented 1 year ago

Thanks for the response. Is it possible to change the port?

Craxti commented 1 year ago

to add a few lines to manage.py which dynamically modify the default port number before invoking the runserver command:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")

    import django
  if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")

    import django
    django.setup()

    # Override default port for `runserver` command
    from django.core.management.commands.runserver import Command as runserver
    runserver.default_port = "8080"

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
  django.setup()

    # Override default port for `runserver` command
    from django.core.management.commands.runserver import Command as runserver
    runserver.default_port = "8080" #change port

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
edmundrotimi commented 1 year ago

Thanks for the response. It turns out Redis was not installed. sudo apt-get install redis fix the error.