rails docker中的delayed_job无法正常工作

时间:2018-02-14 06:37:43

标签: ruby-on-rails docker docker-compose dockerfile delayed-job

我已将我的rails应用程序转移到docker。除了rails delayed_job之外,一切正常。我使用delayed_job发送电子邮件。我已经通过命令docker-compose run web rake jobs:work开始了我的工作,它已经成功启动,如图所示。

enter image description here

现在,当我尝试在控制台中发送电子邮件时,它显示电子邮件已启动,如上图所示。

我是否必须在docker-compose.yml或Dockerfile中包含任何行。

我的Dockerfile是:

FROM ruby:2.3.6

RUN mkdir -p /railsapp
WORKDIR /railsapp

RUN apt-get update && apt-get install -y nodejs --no-install-recommends
RUN apt-get update && apt-get install -y mysql-client  --no-install-recommends

COPY Gemfile /railsapp/

COPY Gemfile.lock /railsapp/


RUN bundle install

COPY . /railsapp

EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

我的docker-compose.yml是:

  version: '3.3'

  services:
    mysql:
      image: mysql
      restart: always
      ports:
        - "3002:3002"
      volumes:
        - /var/lib/mysql
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=dev

    web:
      build: .
      environment:
        - RAILS_ENV=development
      ports:
        - '3000:3000'
      volumes:
        - .:/railsapp
      links:
        - "mysql"
      depends_on:
        - mysql

我对码头工作者来说是全新的。

1 个答案:

答案 0 :(得分:1)

我不确定您是如何配置ActionMailer的,但如果您使用的是默认设置,则可能是通过内置Mail Transfer Agent的服务器发送电子邮件。实际上,这意味着Rails会调用一个名为sendmail的系统命令,该命令接受传出的电子邮件并将其放入本地队列中,以便由名为postfix的服务/守护程序获取。除非您明确启用它,否则Postfix不会在您的Docker容器中运行,并且您的电子邮件不会在任何地方运行。

您可以在此处查看sendmail的示例:https://help.dreamhost.com/hc/en-us/articles/216687518-How-do-I-use-Sendmail-

您有两种选择。

1)在延迟作业容器中启用Postfix。这涉及找出要安装的操作系统包以及要运行的守护程序/服务。

2)切换到外部SaaS邮件服务,例如Sendgrid或Mailgun。这些服务公开了REST或SOAP API,ActionMailer可以直接调用它来发送特定的电子邮件。这消除了托管您自己的后缀服务器的需要。此外,这些第三方服务专门用于正确传递,这可以降低您的电子邮件无意中进入收件人垃圾邮件文件夹的风险。我推荐这种方法。