Ошибка запуска sidekiq в Docker: «Пожалуйста, укажите sidekiq на приложение Rails 4/5» - PullRequest
0 голосов
/ 27 мая 2019

Rails 5.2, Docker Compose, Sidekiq, Redis.

Это файл docker-compose:

version: '3.6'

services:
  redis:
    image: 'redis:4.0-alpine'
    command: redis-server
    ports:
      - '6379:6379'
    volumes:
      - 'redis:/data'

  sidekiq:
    depends_on:
      - 'redis'
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - './:/app'
    env_file:
      - '.env'

  api:
    build: .
    volumes:
      - './:/app'
    working_dir: /app
    command: puma
    ports:
      - 3000:3000
    depends_on:
      - db
      - redis
    environment:
      DATABASE_URL: postgres://postgres@db
  db:
    image: postgres:10.3-alpine

volumes:
  redis:
  postgres:

Похоже, sidekiq не может найти мое приложение Rails.

Если я изменяю sidekiq для запуска следующим образом:

    command: bundle exec sidekiq -C config/sidekiq.yml -r /app

, тогда я получаю эту ошибку:

Spring не смог найти ваш файл config / application.rb.Корень вашего проекта был обнаружен в / api, поэтому Spring искал /api/config/application.rb, но его не существует.Вы можете настроить корневой каталог вашего приложения, установив Spring.application_root в config / spring.rb.

Если я вместо этого добавлю параметр working_dir в sidekiq:

sidekiq:
    depends_on:
      - 'redis'
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - './:/app'
    env_file:
      - '.env'
    working_dir: 
      - '/app'

тогда я получаю эту ошибку:

2019-05-27T20:27:59.770Z 1 TID-gr1e0d7n5 INFO: Booting Sidekiq 5.1.1 with redis options {:url=>"redis://redis:6379/0", :id=>"Sidekiq-server-PID-1"}
sidekiq_1  | could not connect to server: No such file or directory
sidekiq_1  |    Is the server running locally and accepting
sidekiq_1  |    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Итак, как мне заставить sidekiq правильно запускаться в его контейнере?

Я видел эти ответы, которые похожи, но не являются этой конкретной ошибкой:

Вопрос 1

Вопрос 2

Вопрос 3

Вопрос4

1 Ответ

1 голос
/ 27 мая 2019

Кажется, что sidekiq не смог найти приложение Rails, которое исправлено добавлением параметра 'working-dir', а затем он не смог найти postgres, поэтому мне пришлось добавить параметр среды, чтобы указать на postgres.

Конечный файл композиции:

version: '3.6'

services:
  db:
    image: postgres:10.3-alpine
    ports:
      - '5432:5432'

  redis:
    image: 'redis:4.0-alpine'
    command: redis-server
    ports:
      - '6379:6379'
    volumes:
      - 'redis:/data'

  sidekiq:
    depends_on:
      - 'db'
      - 'redis'
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - './:/app'
    env_file:
      - '.env'
    working_dir: /app
    environment:
      DATABASE_URL: postgres://postgres@db

  api:
    build: .
    volumes:
      - './:/app'
    working_dir: /app
    command: puma
    ports:
      - 3000:3000
    depends_on:
      - db
      - redis
    environment:
      DATABASE_URL: postgres://postgres@db

volumes:
  redis:
  postgres:
...