首页 > 解决方案 > 我可以运行我的 rake 作业吗:在运行我的 rails 服务器时在同一个 docker 容器中工作?

问题描述

我的码头工人撰写文件

 web:
    build: .
    command: bundle exec rails s -b 0.0.0.0 -p 3000
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    links:
      - db
      - db-test
    depends_on:
      - db
      - db-test

然后我通常使用

docker-compose exec web bash

然后运行

rake jobs:work

是否可以同时运行这两件事并跳过最后一步?

标签: ruby-on-railsdocker

解决方案


如果您想在同一个代码库上执行两个长时间运行的任务,则可以在同一个映像上运行两个单独的容器。在 Docker Compose 语法中,看起来像

version: '3'
services:
  db: { ... }
  db-test: { ... }
  web:
    build: .
    command: bundle exec rails s -b 0.0.0.0 -p 3000
    ports:
      - "3000:3000"
    depends_on:
      - db
      - db-test
  worker:
    build: .
    command: bundle exec rake jobs:work
    depends_on:
      - db
      - db-test

在一个容器中运行多个任务有点棘手,通常不推荐。例如,您在评论中到达的表单将 Rails 服务器作为后台任务启动,然后将 worker 设为主容器进程;如果由于某种原因主 Rails 应用程序死了,Docker 不会注意到这一点,如果 worker 死了,它会带上 Rails 应用程序。


推荐阅读