为 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

脚本文件归根用户所有,所以我不必将sudocat 一起使用

然后我通过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

同时部署到 Amazon Elastic Beanstalk 上的多个环境

Amazon Elastic Beanstalk 上的 MaxMind GeoIP 库和数据库