为 Amazon Beanstalk 上的 Laravel Queue Worker 提供环境变量
Posted
技术标签:
【中文标题】为 Amazon Beanstalk 上的 Laravel Queue Worker 提供环境变量【英文标题】:Provide environment variables to Laravel Queue Worker on Amazon Beanstalk 【发布时间】:2021-12-23 13:05:46 【问题描述】:所以我在邮件通知方面遇到了这个奇怪的问题。我在 Amazon Elastic Beanstalk 上进行了部署,并且我使用 Amazon SQS 作为排队服务。对于邮件,我使用 Mailgun。现在的问题是当邮件通知排队并处理失败时。
这是有趣的部分,当我发送未排队的电子邮件通知时,它会正确发送,然后队列电子邮件也会发送一段时间,然后它们又开始失败。
我也在通知中添加了SerializeModels
trait。但是,在我发送一封未排队的电子邮件之前,它不起作用。
我的User
类也正确实现了routeNotificationForMail
方法,并且正在返回用户的电子邮件。
有人遇到过类似的问题吗?
##EDIT
所以我已经深入到问题所在,在systemd
中运行的工作进程不知何故无法从文件/opt/elasticbeanstalk/deployment/env
转换或传输环境变量。现在,当我在终端中运行它时,队列处理得很好。但是当队列工作者重新启动时,没有任何效果。
我在我的laravel_worker.service
中使用EnvironmentFile=/opt/elasticbeanstalk/deployment/env
有人知道我该怎么做吗?
【问题讨论】:
【参考方案1】:所以在反复试验之后......到处敲打我的头......解决方案非常简单。
我知道向tinker
提供环境变量的命令,所以我创建了一个shell脚本,内容如下。
#!/bin/sh
cd /var/www/html && export $(cat /opt/elasticbeanstalk/deployment/env) && php artisan queue:work
脚本文件归根用户所有,所以我不必将
sudo
与cat
一起使用
然后我通过systemd
服务执行脚本。
ExecStart=/usr/bin/nohup /var/www/html/worker_script.sh
通过.ebextenstions
files:
/var/www/html/worker_script.sh:
mode: "000755"
owner: root
content: |
#!/bin/sh
cd /var/www/html && export $(cat /opt/elasticbeanstalk/deployment/env) && php artisan queue:work
/etc/systemd/system/laravel_worker.service:
mode: "000755"
owner: root
group: root
content: |
# Laravel queue worker using systemd
# ----------------------------------
#
# /lib/systemd/system/queue.service
#
# run this command to enable service:
# systemctl enable queue.service
[Unit]
Description=Laravel queue worker
[Service]
EnvironmentFile=/opt/elasticbeanstalk/deployment/env
Restart=always
ExecStart=/usr/bin/nohup /var/www/html/worker_script.sh
[Install]
WantedBy=multi-user.target
所有配置文件都可以在https://github.com/stescacom/elastic_beanstalk_laravel_mongo_config获得,希望这对其他人有帮助。
【讨论】:
以上是关于为 Amazon Beanstalk 上的 Laravel Queue Worker 提供环境变量的主要内容,如果未能解决你的问题,请参考以下文章
Django 在 Amazon Elastic Beanstalk 上的迁移命令被杀死
Elastic Beanstalk 上的 PostgreSQL (Amazon Linux 2)
Amazon elastic beanstalk 上的 HTTP/HTTPS nodejs 服务器
Amazon Elatisc BeanStalk 单实例上的 SSL 端口 NodeJS