问题标签 [laravel-jobs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
379 浏览

laravel-6 - Laravel 6.10 应用程序在本地工作,但在生产服务器上失败,并显示“目标类 [] 不存在”。

这个问题专门针对 Laravel 6.10 和队列处理。在我的本地机器上,程序运行良好,所有排队的作业都加载良好并处理完成。在我的 GoDaddy 服务器上,当作业尝试加载时,我收到一个神秘错误,内容如下:

我相信问题开始了,并将通过修复第 4 项的跟踪来解决,其中调用了以下内容:Illuminate\Queue\Jobs\Job->resolve(NULL). 我在 GoDaddy 服务器上的两个失败作业中都看到了这一点,但它不会在本地发生。我对 laravel 的了解还不够,无法理解 NULL 值的来源以及如何修复它。这发生在加载作业类之前,但并非对所有排队的作业都发生。只有这个类的工作。

在本地副本和生产副本中,我都使用 GoDaddy 数据库,因此两个系统都与同一个数据库主机通信。我使用名为 CMP_dev 和 CMP_core 的数据库来区分开发表和生产表。因为我使用的是相同的数据库源,所以我可以排除 mysql 设置的更改。

我升级了所有作曲家包并重新测试。然后,我提交了 composer.lock 文件并更新了 GoDaddy 服务器以匹配。因此,我可以排除已经由其他人修复的旧错误代码的问题。

服务器上的PHP版本是7.3.11,本地dev上的PHP版本是7.3.6。好消息是它们都是 7.3.X,这降低了语言变化的风险,但 7.3.6 和 7.3.11 之间仍然可能存在问题,但 GoDaddy 不允许我控制次要版本以外的 PHP 设置数量 7.3。

---- 2020 年 1 月 9 日添加----- 我认为这可能是 Web 服务器的差异。在我的本地机器上,我php artisan serve用来托管软件。在 GoDaddy 上,我使用 Nginx。但是,后来我意识到运行队列的不是服务器。命令行运行队列,两个命令都使用php artisan schedule:run. 这排除了 Web 服务器软件及其所有组件。- - - - - - - - -

我已经成功运行了排队的邮件作业,这意味着队列可以工作。这应该将问题本地化到为我产生问题的两个类。如果我能找到一个问题,我很可能会找到第二个问题,所以我将在此处包含第一个导致问题的工作:

应用程序/工作/ConvertCsvFileToIntermediateFile.php:

在调用 handle() 之前发生错误。我知道这一点,因为当我将 add($this->file)作为句柄的第一行时,永远不会到达该行。

另外,我认为重要的是要注意,当大多数作业失败时,它们的类名会列在 queue:failed 表中。但在这种情况下,queue:failed 表读取时间:“2020-01-08 09:23:23”。

0 投票
2 回答
2787 浏览

laravel - Laravel - 理解工作概念

处理 Laravel 队列,我的理解是作业是保留在队列中要一个接一个执行的任务。

Laravel 文档说:

换句话说,如果您在没有明确定义应该分派到哪个队列的情况下分派作业,则该作业将被放置在连接配置的 queue 属性中定义的队列中:

// 这个作业被发送到默认队列...

// 这个作业被发送到“电子邮件”队列...

在同一个文档页面的另一个地方,我发现:

ProcessPodcast是这里的工作,它被派发一个参数,即$podcast. Job::但是除了提到的两行之外,我在文档中没有找到语法。

Q1)那么在哪里以及如何使用语法Job::

connections内部数组中的每个元素config/queue.php都有 'queue' => 'default',.

Q2)emails队列从哪里来Job::dispatch()->onQueue('emails');

0 投票
1 回答
191 浏览

laravel - 链中的所有作业都没有在 laravel 任务调度中执行?

我试图在 laravel 任务调度中链式运行三个作业,kernel.php但它只执行第一个作业而忽略其他两个作业。

kernel.php

我想一一运行链中的所有作业。

0 投票
2 回答
1956 浏览

php - 如何处理 php artisan queue:listen

我在 Laravel 队列系统中遇到了一个严重的问题,请帮我解决这个问题。

一旦我使用

它存储到数据库中并从终端php artisan queue:listen运行此命令, 一旦我关闭我的终端它就可以正常工作它不听我的队列。

为此,我在 kernem.php 文件中设置了一个计划,就像每分钟运行的那样

将此行设置为 cronjob 并正常工作

问题是每分钟运行每分钟运行它不会杀死前一个进程并在下一分钟运行另一个进程它会减慢我的服务器

请你能告诉我什么是实现这个的最佳方法

提前致谢

0 投票
1 回答
589 浏览

laravel - 如何在laravel中将计划任务作业放入链中?

我在它里面使用 laravel 任务调度队列作业或工作我想把这些作业放在链中 kernel.php

我尝试使用 laravel withChain 方法,但它不起作用。

我想在链中运行这些工作

0 投票
0 回答
594 浏览

laravel - Laravel 杀死队列作业

我在我的项目中使用 laravel 5.6,我需要一个队列作业。我决定使用 Amazon Sqs,并成功地将我的应用程序与 aws 连接起来。我使用命令创建了一个队列作业文件:

之后,laravel 生成一个 Jobs 文件夹和 MakeAmazingJob 文件。之后使用命令:

我开始了我的工作,并且很成功。然后我删除这个 MakeAmazingJob 文件并使用命令生成新的作业文件:

然后我想开始我的新工作并开始使用命令:

在终端输出中是:

无限..

在这个输出之后我用谷歌搜索,因为我例外并且应该是 laravel 不应该尝试处理删除作业,我找到了一个解决方案,它是使用这个命令:

在我重新开始我的工作后,我尝试并使用了这个命令,结果仍然是一样的。Laravel 正在尝试无限处理删除作业。那么,如何才能杀死已移除的队列作业呢?

谢谢!

0 投票
1 回答
20 浏览

php - 如何检查我的工作是否在分派后调用了句柄方法?

我有以下控制器:

我有以下工作:

而durirt开发我看是否访问到dispatchJob控制器方法中指示的路由会调度工作。但我注意到我的工作是继续派遣:

使用的命令是php artisan queue:listen

但似乎没有任何工作是成功完成或失败完成的。所以我想调试原因。所以我想问以下问题:

  1. 如何让我的代码在我的工作中中断一个断点,以便我可以使用 Xdebug 来调试它?我尝试通过命令启动运行程序,XDEBUG_CONFIG="idekey=VSCODE" php artisan queue:listen但我的 IDE 仍无法进入断点。

  2. 另外,我如何记录函数dumpdd函数的信息,以便我可以在运行 artisan 命令的屏幕/控制台中看到结果?我尝试查看 larave 的默认日志:./storage/logs/laravel-2020-03-26.log仍然在我的控制台或日志上都没有看到任何关于dump或的输出dd

我尝试了上面的方法,但我既看不到 dd 的输出也看不到断点。

此外,我尝试使用专用日志通道:

然后使用以下方法记录任何消息:

但是没有任何信息被登录./storage/logs/jobs-2020-03-26.log。你知道一旦我分派我的工作,我如何获得关于正在执行的内容的调试信息吗?我想要实现的是记录,有一个视觉指示正在调用方法句柄。

0 投票
2 回答
2018 浏览

php - Laravel 7 在 Job 类中动态设置日志路径

我在 Laravel 7.3 上构建项目,同时运行多个作业。我需要让每个 Job 将日志写入不同的每日旋转文件。日志文件的名称应基于 Job 正在处理的模型。

问题是我找不到聪明的解决方案。

我试过的:

1) 在config/logging.php.

这按预期工作,但目前大约有 50 个不同的工作,并且数量不断增长。方法很丑陋,很难维护。

2)设置Config(['logging.channels.CUSTOMCHANNEL.path' => storage_path('logs/platform/'.$this->platform->name.'.log')]);

使用 Config 变量是个坏主意,因为许多作业一次运行。结果,来自一个作业的消息通常被写入另一个作业日志。

3)使用Log::useDailyFiles()

自 laravel 5.5 或 5.6 以来,这似乎停止工作。只是得到错误Call to undefined method Monolog\Logger::useDailyFiles()。任何想法如何在 laravel 7 中工作?

4) 使用tap通道参数config/logging.php

laravel 文档中的示例 不知道如何将模型名称传递给 CustomizeFormatter 以设置文件名。

我几乎可以肯定有聪明的解决方案,我只是错过了一些东西。有什么建议吗?谢谢!

0 投票
0 回答
244 浏览

laravel - Undefined property when using Queue::before job

I have a problem and after 2hours didn't figure out what's my problem!

I use Queue::before in AppServiceProvider, and I want to check if x value for x user exists in the table don't fire job instantly and add release it after 60 sec ! and again this function check if x value is null job will fire!

Now my problem is in line 4 cant get $data->test->user_id and after event fire, I will get this error!

Undefined property: Illuminate\Broadcasting\BroadcastEvent::$test

but if I use dd($data->test->user_id) I will get user_id correctly !

#xA;

dd($jsonpayload);

#xA;

What do you think guys? What's my problem?

0 投票
0 回答
130 浏览

php - 如何在 laravel JOB 表中存储附加数据

场景:用户可以在一个班级中完成多项作业。

所以用户有一个ID [user_id],分配有一个ID [assignment_id],用户可以多次进行分配。因此,用户所做的分配具有尝试编号 [assignment_attempt ]。

我使用 Laravel 数据库队列将分配相关的数据存储在数据库中。

现在我想删除与用户在给定尝试中所做的分配相关的所有记录。

我不想将作业 ID 存储在另一个表中,因为它增加了可能服务器中每秒的数据库请求数。

有没有办法将 user_id、assignment_id、assignment_attempt 存储在 JOB 表上?