【发布时间】:2018-07-09 01:43:33
【问题描述】:
我使用 Laravel Forge 在不同的环境中运行了三个相同的 Laravel 应用程序。
假设这是三个网站:
-
site.com(生产) -
staging.site.com(暂存) -
dev.site.com(开发)
在生产站点上,我运行 Laravel Horizon 来监控生产站点的队列。
当我在dev.site.com 上运行密码重置时,由于队列中发生异常,电子邮件没有发送给用户。
Illuminate\Database\Eloquent\ModelNotFoundException: 没有查询结果 对于模型 [App\Models\User]。在 /home/forge/site.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:412
如果您仔细查看错误,您会发现错误发生在site.com 生产环境中。因此,一封电子邮件在开发环境中排队,但在生产环境中执行。
这是我的queue.php 配置:
<?php
return [
'default' => env('QUEUE_DRIVER', 'high'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'high' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
'medium' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
'low' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
],
'failed' => [
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
];
这些是 Forge 上所有三个环境的队列设置:
这是正常行为吗?还是我做错了什么?
【问题讨论】:
-
您有两个独立的数据库用于生产和开发站点吗?
-
其实我有。一种用于生产,一种用于暂存,一种用于开发。
-
你有 c/p 工作类代码吗?是否设置了一些环境变量?