delayed_job 在 rails docker 中无法正常工作
delayed_job in rails docker is not working properly
我已将我的 rails 申请转移到 docker。除 rails delayed_job 外,一切正常。我使用 delayed_job 发送电子邮件。我已经通过命令 docker-compose run web rake jobs:work
开始了我的工作,它已经成功启动,如图所示。
现在,当我尝试在控制台中发送电子邮件时,它显示电子邮件已启动,如上图所示。
我是否必须在我的 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
我对 docker 完全陌生。
我不确定您是如何配置 ActionMailer 的,但是如果您使用的是默认设置,则可能是通过您的服务器 built-in Mail Transfer Agent
发送 e-mail。实际上,这意味着 Rails 调用一个名为 sendmail
的系统命令,该命令接受传出的 e-mail 并将其放入本地队列中,以供 service/daemon 调用 postfix
。除非您明确启用它,否则 Postfix 不会 运行 在您的 Docker 容器中并且您的 e-mails 不会去任何地方。
您可以在此处查看 sendmail
的示例:https://help.dreamhost.com/hc/en-us/articles/216687518-How-do-I-use-Sendmail-
你有两个选择。
1) 在延迟作业容器中启用 Postfix。这涉及找出要安装哪个 OS 包以及 daemon/service 到 运行。
2) 切换到外部 SaaS 邮件服务,例如 Sendgrid 或 Mailgun。这些服务公开 REST 或 SOAP API,ActionMailer 可以直接调用它们来发送特定的 e-mail。这消除了托管您自己的后缀服务器的需要。此外,这些第三方服务专注于正确投递,这降低了您的 e-mail 无意中进入收件人垃圾邮件文件夹的风险。我推荐这种方法。
我已将我的 rails 申请转移到 docker。除 rails delayed_job 外,一切正常。我使用 delayed_job 发送电子邮件。我已经通过命令 docker-compose run web rake jobs:work
开始了我的工作,它已经成功启动,如图所示。
现在,当我尝试在控制台中发送电子邮件时,它显示电子邮件已启动,如上图所示。
我是否必须在我的 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
我对 docker 完全陌生。
我不确定您是如何配置 ActionMailer 的,但是如果您使用的是默认设置,则可能是通过您的服务器 built-in Mail Transfer Agent
发送 e-mail。实际上,这意味着 Rails 调用一个名为 sendmail
的系统命令,该命令接受传出的 e-mail 并将其放入本地队列中,以供 service/daemon 调用 postfix
。除非您明确启用它,否则 Postfix 不会 运行 在您的 Docker 容器中并且您的 e-mails 不会去任何地方。
您可以在此处查看 sendmail
的示例:https://help.dreamhost.com/hc/en-us/articles/216687518-How-do-I-use-Sendmail-
你有两个选择。
1) 在延迟作业容器中启用 Postfix。这涉及找出要安装哪个 OS 包以及 daemon/service 到 运行。
2) 切换到外部 SaaS 邮件服务,例如 Sendgrid 或 Mailgun。这些服务公开 REST 或 SOAP API,ActionMailer 可以直接调用它们来发送特定的 e-mail。这消除了托管您自己的后缀服务器的需要。此外,这些第三方服务专注于正确投递,这降低了您的 e-mail 无意中进入收件人垃圾邮件文件夹的风险。我推荐这种方法。