NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
17.48k stars 13.66k forks source link

paperless is not able to access redis #179432

Closed matthiasbeyer closed 2 years ago

matthiasbeyer commented 2 years ago

Describe the bug

Redis should bind to a port if the port is not zero (according to documentation).

Redis seems not to log that it binds to a port, but telnet to said port works. So my suspicion is rather that something wrong with paperless, because it does not find redis:

  services.redis.servers.paperless = {
    enable = true;
    bind = "127.0.0.1"; # only for local stuff
    port = 6379;
  };

 services.paperless = {
    enable = true;
    port = 8080;
    consumptionDirIsPublic = true;

    extraConfig = {
      # ... other settings
      PAPERLESS_REDIS = let
        server = config.services.redis.servers.paperless.bind;
        port = builtins.toString config.services.redis.servers.paperless.port;
      in "redis://${server}:${port}";
# etc...

Log:

Jul 02 19:36:24 takeshi paperless-ngx[498288]: redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
Jul 02 19:36:24 takeshi paperless-ngx[498288]: [2022-07-02 17:36:24,714] [INFO] [paperless.management.consumer] Adding /var/lib/paperless/consume/IMG_20220628_111201.jpg to the task queue.
Jul 02 19:36:24 takeshi paperless-ngx[498288]: [2022-07-02 17:36:24,715] [ERROR] [paperless.management.consumer] Error while consuming document
Jul 02 19:36:24 takeshi paperless-ngx[498288]: Traceback (most recent call last):
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/connection.py", line 614, in connect
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     sock = self.retry.call_with_retry(
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/retry.py", line 45, in call_with_retry
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     return do()
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/connection.py", line 615, in <lambda>
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     lambda: self._connect(), lambda error: self.disconnect(error)
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/connection.py", line 680, in _connect
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     raise err
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/connection.py", line 668, in _connect
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     sock.connect(socket_address)
Jul 02 19:36:24 takeshi paperless-ngx[498288]: ConnectionRefusedError: [Errno 111] Connection refused
Jul 02 19:36:24 takeshi paperless-ngx[498288]: During handling of the above exception, another exception occurred:
Jul 02 19:36:24 takeshi paperless-ngx[498288]: Traceback (most recent call last):
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/aprjlpkii8hbkqrbc966lxgsx88n4q95-paperless-ngx-1.6.0/lib/paperless-ngx/src/documents/management/commands/document_consumer.py", line 64, in _consume
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     async_task(
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/5mlf4bmilasrxxqrgbj62zqdrnnk8nq5-python3.9-django-q-1.3.9/lib/python3.9/site-packages/django_q/tasks.py", line 73, in async_task
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     enqueue_id = broker.enqueue(pack)
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/5mlf4bmilasrxxqrgbj62zqdrnnk8nq5-python3.9-django-q-1.3.9/lib/python3.9/site-packages/django_q/brokers/redis_broker.py", line 18, in enqueue
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     return self.connection.rpush(self.list_key, task)
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/commands/core.py", line 2600, in rpush
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     return self.execute_command("RPUSH", name, *values)
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/client.py", line 1192, in execute_command
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     conn = self.connection or pool.get_connection(command_name, **options)
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/connection.py", line 1386, in get_connection
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     connection.connect()
Jul 02 19:36:24 takeshi paperless-ngx[498288]:   File "/nix/store/yaswrl2blmpiif9aask68isivnhhiqkb-python3.9-redis-4.2.1/lib/python3.9/site-packages/redis/connection.py", line 620, in connect
Jul 02 19:36:24 takeshi paperless-ngx[498288]:     raise ConnectionError(self._error_message(e))
Jul 02 19:36:24 takeshi paperless-ngx[498288]: redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.

I tried paperless from stable nixos (1.6.0) and unstable (1.7.1). Same issue.

Steps To Reproduce

Use the paperless service with redis as described above.

Expected behavior

Paperless finds redis.

Notify maintainers

@ju1m (wrote the port option implementation AFAICS) @lukegb (maintainer of paperless)

Metadata

[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 5.10.124, NixOS, 22.05 (Quokka), 22.05.git.cd90e773eae`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.8.1`
 - nixpkgs: `/var/src/nixpkgs`
matthiasbeyer commented 2 years ago

Hey @ju1m and @lukegb - care to investigate?

nixos-discourse commented 2 years ago

This issue has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/someone-successfully-running-paperless-ngx/20511/1

matthiasbeyer commented 2 years ago

So from the discourse thread:

The fix is to not configure redis for paperless. This way, paperless spins up a redis instance for its own. I don't know whether this comes from the nixos service definition or from paperless itself and I don't care. It is not documented anywhere and this sucks.

At least it is documented here in this issue now.

Gonna close this now.