Laravel Forge 在同一服务器上的多个队列
Multiple queues on the same server with Laravel Forge
我有三个相同的 Laravel 应用程序 运行ning 但在不同的环境中使用 Laravel Forge。
假设这是三个站点:
site.com
(生产)
staging.site.com
(分期)
dev.site.com
(发展)
在生产站点上,我 运行 Laravel Horizon 用于监视生产站点的队列。
当我 运行 在 dev.site.com
上重置密码时,由于队列中发生异常,电子邮件未发送给用户。
Illuminate\Database\Eloquent\ModelNotFoundException: No query results
for model [App\Models\User]. in
/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 上所有三个环境的队列设置:
这是正常行为吗?还是我做错了什么?
听起来您在所有站点上使用相同的队列驱动程序并且它们具有相同的配置,对吧?如果是这种情况,您将在所有三个站点上进行合并,即 "contaminating" 一个与其他站点。您需要更改每个配置,以便它们具有单独的队列,这样可以将它们分开。您甚至可以拥有单独的 redis、数据库、内存缓存等实例。事实上,我建议您至少在生产环境中这样做。
我有三个相同的 Laravel 应用程序 运行ning 但在不同的环境中使用 Laravel Forge。
假设这是三个站点:
site.com
(生产)staging.site.com
(分期)dev.site.com
(发展)
在生产站点上,我 运行 Laravel Horizon 用于监视生产站点的队列。
当我 运行 在 dev.site.com
上重置密码时,由于队列中发生异常,电子邮件未发送给用户。
Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\Models\User]. in /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 上所有三个环境的队列设置:
这是正常行为吗?还是我做错了什么?
听起来您在所有站点上使用相同的队列驱动程序并且它们具有相同的配置,对吧?如果是这种情况,您将在所有三个站点上进行合并,即 "contaminating" 一个与其他站点。您需要更改每个配置,以便它们具有单独的队列,这样可以将它们分开。您甚至可以拥有单独的 redis、数据库、内存缓存等实例。事实上,我建议您至少在生产环境中这样做。