我可以在运行Rails服务器的同一个Docker容器中运行rake job:work吗?

时间:2019-11-09 09:57:12

标签: ruby-on-rails docker

我的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

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

1 个答案:

答案 0 :(得分:1)

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

SELECT TOP 20
    rv.productId,
    p.productNameNO as productName,
    picid,
    picurl,
    rv.productRecentlyViewedId,
    rv.dateCreated,
    rv.lang,
    rv.isUserLoggedIn,
    rv.userId,
    rv.productVariantId
FROM 
    ProductRecentlyViewed rv
INNER JOIN 
    Product AS p ON rv.productid = p.productid
LEFT JOIN 
    (SELECT 
         productid,
         picurl,
         picid,
         ROW_NUMBER() OVER (PARTITION BY productid ORDER BY isfrontpic DESC) rn
     FROM 
         productpic) c ON c.rn = 1
                       AND rv.productId = c.productId
WHERE 
    rv.lang = 'NO'
    AND rv.cookieId = CONVERT(uniqueidentifier, '1f102c74-278b-430e-8129-1261dfc7e2ac')
ORDER BY 
    rv.dateCreated

在一个容器中运行多个任务比较棘手,通常不建议这样做。例如,您在注释中到达的表单将Rails服务器作为后台任务启动,然后使worker成为主要的容器进程。如果主Rails应用程序死于某种原因,则Docker不会注意到这一点,如果工作人员死亡,它将随同Rails应用程序一起使用。