Reactive-Resume icon indicating copy to clipboard operation
Reactive-Resume copied to clipboard

[Bug] PDF does not download, no response after clicking

Open KShivum opened this issue 3 months ago • 1 comments

Is there an existing issue for this?

  • [X] Yes, I have searched the existing issues and none of them match my problem.

Product Variant

Self-Hosted

Current Behavior

Clicking on Download PDF or export PDF has it do the circle loading animation, then just stops.

Expected Behavior

Downloads the PDF

Steps To Reproduce

No response

What browsers are you seeing the problem on?

Chrome, Microsoft Edge

What template are you using?

None

Anything else?

Using this docker compose. Both domains are using cloudflared, the public url points to the ip :5160, Storageurl checks the url with the /default then sends it to ip:5140

version: "3.8"

# In this Docker Compose example, it assumes that you maintain a reverse proxy externally (or chose not to).
# The only two exposed ports here are from minio (:9000) and the app itself (:3000).
# If these ports are changed, ensure that the env vars passed to the app are also changed accordingly.

services:
  # Database (Postgres)
  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    volumes:
      - /mnt/user/appdata/ReactiveResume/db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Storage (for image uploads)
  minio:
    image: minio/minio
    restart: unless-stopped
    command: server /data
    ports:
      - 5140:9000
    volumes:
      - /mnt/user/appdata/ReactiveResume/minio:/data
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin

  # Chrome Browser (for printing and previews)
  chrome:
    image: ghcr.io/browserless/chromium:latest
    restart: unless-stopped
    extra_hosts:
      - host.docker.internal:host-gateway
    environment:
      TIMEOUT: 10000
      CONCURRENT: 10
      TOKEN: chrome_token
      EXIT_ON_HEALTH_FAILURE: true
      PRE_REQUEST_HEALTH_CHECK: true

  # Redis (for cache & server session management)
  redis:
    image: redis:alpine
    restart: unless-stopped
    command: redis-server --requirepass password

  app:
    image: amruthpillai/reactive-resume:latest
    restart: unless-stopped
    ports:
      - 5160:3000
    depends_on:
      - postgres
      - minio
      - redis
      - chrome
    environment:
      # -- Environment Variables --
      PORT: 3000
      NODE_ENV: production

      # -- URLs --
      PUBLIC_URL: https://resume.xxxx
      STORAGE_URL: http://resume.xxxx/default

      # -- Printer (Chrome) --
      CHROME_TOKEN: chrome_token
      CHROME_URL: ws://chrome:3000

      # -- Database (Postgres) --
      DATABASE_URL: postgresql://postgres:postgres@postgres:5432/postgres

      # -- Auth --
      ACCESS_TOKEN_SECRET: xxx
      REFRESH_TOKEN_SECRET: xxx

      # -- Emails --
      MAIL_FROM: xxx
      # SMTP_URL: smtp://user:pass@smtp:587 # Optional

      # -- Storage (Minio) --
      STORAGE_ENDPOINT: minio
      STORAGE_PORT: 9000
      STORAGE_REGION: us-east-1 # Optional
      STORAGE_BUCKET: default
      STORAGE_ACCESS_KEY: minioadmin
      STORAGE_SECRET_KEY: minioadmin
      STORAGE_USE_SSL: false

      # -- Cache (Redis) --
      REDIS_URL: redis://default:password@redis:6379

Looking at the app logs I'm getting

Trace: TargetCloseError: Protocol error (IO.read): Target closed
    at CallbackRegistry.clear (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:72:36)
    at CdpCDPSession._onClosed (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:101:25)
    at #onClose (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:157:21)
    at WebSocket.<anonymous> (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js:47:30)
    at callListener (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14)
    at WebSocket.onClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:220:9)
    at WebSocket.emit (node:events:518:28)
    at WebSocket.emit (node:domain:488:12)
    at WebSocket.emitClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:265:10)
    at Socket.socketOnClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1289:15) {
  cause: ProtocolError
      at <instance_members_initializer> (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:93:14)
      at new Callback (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:97:16)
      at CallbackRegistry.create (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:22:26)
      at Connection._rawSend (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:80:26)
      at CdpCDPSession.send (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:66:33)
      at Object.pull (/app/node_modules/.pnpm/[email protected]/node_modules/puppeteer-core/lib/cjs/puppeteer/common/util.js:252:63)
      at ensureIsPromise (node:internal/webstreams/util:185:19)
      at readableStreamDefaultControllerCallPullIfNeeded (node:internal/webstreams/readablestream:2354:5)
      at node:internal/webstreams/readablestream:2359:9
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
}
    at PrinterService.generateResume (/app/dist/apps/server/main.js:13261:21)
    at async PrinterService.printResume (/app/dist/apps/server/main.js:13158:21)
    at async ResumeService.printResume (/app/dist/apps/server/main.js:13993:21)
    at async ResumeController.printResume (/app/dist/apps/server/main.js:13615:25)

I've looked at similar issues but it seems to still happen anyways

KShivum avatar Apr 06 '24 00:04 KShivum

Would suggest trying the suggestions I placed in this comment ( https://github.com/AmruthPillai/Reactive-Resume/issues/1828#issuecomment-2017239665 ) - it appears to have worked for a number of other people, and it may work for you as well.

andrew-cullen avatar Apr 13 '24 05:04 andrew-cullen