n8n 中 Python 程式碼節點的問題

你好!
我在 n8n 工作流程的代碼節點(我使用 Python)中遇到了錯誤:
Error: Task request timed out after 60 seconds at LocalTaskRequester.requestExpired (/usr/local/lib/node_modules/n8n/src/task-runners/task-managers/task-requester.ts:304:17) at LocalTaskRequester.onMessage (/usr/local/lib/node_modules/n8n/src/task-runners/task-managers/task-requester.ts:272:10) at TaskBroker.handleRequestTimeout (/usr/local/lib/node_modules/n8n/src/task-runners/task-broker/task-broker.service.ts:124:50) at Timeout. (/usr/local/lib/node_modules/n8n/src/task-runners/task-broker/task-broker.service.ts:110:9) at listOnTimeout (node:internal/timers:605:17) at processTimers (node:internal/timers:541:7)

我的代碼:

snippet_text = _items[0]["json"]["snippet"]
return [{'json': {'snippet': snippet_text}}]

我透過 docker compose 啟動 n8n。
這是我的 docker compose 設定檔:


services:

  n8n:

    image: n8nio/n8n:latest

    container_name: n8n-main

    restart: always

    environment:

      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false

      - N8N_BLOCK_ENV_ACCESS_IN_NODE=false

      - N8N_HOST=://example.com

      - N8N_PORT=5678

      - WEBHOOK_URL=http://localhost:5678/

      - DB_TYPE=postgresdb

      - DB_POSTGRESDB_HOST=postgres

      - DB_POSTGRESDB_PORT=5432

      - DB_POSTGRESDB_DATABASE=n8n

      - DB_POSTGRESDB_USER=n8n_user

      - DB_POSTGRESDB_PASSWORD=your_postgres_password

      - N8N_RUNNERS_ENABLED=true

      - N8N_RUNNERS_MODE=external

      - N8N_RUNNERS_AUTH_TOKEN=super_secure_token_change_me

      - N8N_RUNNERS_BROKER_PORT=5679

      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0

    ports:

      - "5678:5678"

      - "5679:5679"

    volumes:

      - n8n_data:/home/node/.n8n

    depends_on:

      postgres:

        condition: service_healthy



  n8n-runner:

    image: n8nio/runners:latest

    container_name: n8n-task-runner

    restart: always

    environment:

    - N8N_RUNNERS_ENABLED_MODES=python

      - N8N_RUNNERS_BROKER_URL=ws://n8n:5679

      - N8N_RUNNERS_AUTH_TOKEN=super_secure_token_change_me

    depends_on:

      - n8n



  postgres:

    image: postgres:15-alpine

    container_name: n8n-postgres

    restart: always

    environment:

      - POSTGRES_USER=n8n_user

      - POSTGRES_PASSWORD=your_postgres_password  

      - POSTGRES_DB=n8n

    volumes:

      - postgres_data:/var/lib/postgresql/data

    healthcheck:

      test: \["CMD-SHELL", "pg_isready -U n8n_user -d n8n"\]

      interval: 5s

      timeout: 5s

      retries: 5



volumes:

  n8n_data:

  postgres_data:

我該如何修復這個問題?

提前感謝!

歡迎 @Quent

你的 runner 服務有兩個錯誤的環境變數名稱導致逾時。將 N8N_RUNNERS_BROKER_URL 替換為 N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679,並將 N8N_RUNNERS_ENABLED_MODES 替換為 N8N_RUNNERS_ENABLED_TASK_TYPES=javascript,python。同時修正你的 runner environment 區塊中的 YAML 縮排 - 所有項目需要一致的前導空格。以下是更正後的 n8n-runner 服務:

n8n-runner:
image: n8nio/runners:latest
container_name: n8n-task-runner
restart: always
environment:

  • N8N_RUNNERS_ENABLED_TASK_TYPES=javascript,python
  • N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
  • N8N_RUNNERS_AUTH_TOKEN=super_secure_token_change_me
    depends_on:
  • n8n

更新後,執行 docker compose down && docker compose up -d。如果仍然發生逾時,你可以在 n8n 服務環境中新增 N8N_RUNNERS_TASK_REQUEST_TIMEOUT=120 來給予 runner 更多時間。

謝謝!