当前位置: 首页 > 知识库问答 >
问题:

使用laravel队列无法在我的共享主机解决方案上运行

郑衡
2023-03-14

试图让队列在我的共享主机上工作,

  • 我已经设置了一个cron作业来运行'php工匠队列:工作'每分钟。
  • 我正在使用数据库驱动程序
  • 工作进入到工作表罚款
  • 如果我使用同步驱动程序,它可以在我的共享主机上工作在我的开发人员机器上,它可以同时使用同步和数据库驱动程序。
  • 我不下降Laravel队列:如何使用共享主机提供了一个足够的答案,因为我有cron的可能性,因此我想让它与数据库驱动程序的工作
  • php是cli和web界面的5.5版本。

php artisan队列:在我的共享主机上工作(通过cron)返回

[ErrorException] 
Invalid argument supplied for foreach()

在我的日志文件中写了以下内容。

[2015-04-12 18:59:01] production.ERROR: exception 'ErrorException' with message 'Invalid argument supplied for foreach()' in /home/a109/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php:287 Stack trace:
#0 /home/a109/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php(287): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Invalid argumen...', '/home/a109/vend...', 287, Array)
#1 /home/a109/vendor/symfony/console/Symfony/Component/Console/Application.php(823): Symfony\Component\Console\Input\ArgvInput->hasParameterOption(Array)
#2 /home/a109/vendor/symfony/console/Symfony/Component/Console/Application.php(123): Symfony\Component\Console\Application->configureIO(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /home/a109/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(94): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 /home/a109/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 {main}

在供应商/symfony/console/symfony/Component/console/Input/ArgvInput中的第287行。这里有一个函数

  /**
 * Returns true if the raw parameters (not parsed) contain a value.
 *
 * This method is to be used to introspect the input parameters
 * before they have been validated. It must be used carefully.
 *
 * @param string|array $values The value(s) to look for in the raw parameters (can be an array)
 *
 * @return bool true if the value is contained in the raw parameters
 */
public function hasParameterOption($values)
{
    $values = (array) $values;

    foreach ($this->tokens as $token) {
        foreach ($values as $value) {
            if ($token === $value || 0 === strpos($token, $value.'=')) {
                return true;
            }
        }
    }

    return false;
}

这就是失败的傻瓜。

我怎么才能让这个工作?

共有2个答案

李康安
2023-03-14

自Laravel 5.7以来,有一个新的队列命令用于在空时停止工作:

php artisan队列:工作——空时停止

由于这主要是针对电子邮件或少量工作,我将其放在cronjob上,每分钟运行一次。我想说,这并不是一个每分钟处理20多个工作的解决方案,但对我的电子邮件有效。这将运行约5秒每分钟只是为了发送电子邮件,取决于多少电子邮件。

  1. 创建新命令:$php artisan make:命令SendConrectEmails
  2. SendConrectEmails.php中,更改:protected$签名='email: work';
  3. 句柄()方法中,添加:
return $this->call('queue:work', [
    '--queue' => 'emails', // remove this if queue is default
    '--stop-when-empty' => null,
]);
protected $commands = [
    \App\Console\Commands\SendContactEmails::class
];
protected function schedule(Schedule $schedule)
{
    $schedule->command('emails:work')->everyMinute();
    // you can add ->withoutOverlapping(); if you think it won't finish in 1 minute
}
* * * * * /usr/local/bin/php /home/username/project/artisan schedule:run > /dev/null 2>&1

来源

--stop when empty选项可用于指示工人处理所有作业,然后优雅地退出。如果要在队列为空后关闭容器,则在Docker容器内处理Laravel队列时,此选项非常有用:

php artisan队列:工作——空时停止

汪甫
2023-03-14

在自由节点由Comyn in#laravel回答

我不得不将cron命令更改为:

php -d register_argc_argv=On artisan queue:work
 类似资料:
  • 我有个问题。My laravel在共享主机上看不到图像。 我有公共文件夹在~/域/DOMAIN/public_html/APP和其余的文件在~/域/DOMAIN/文件。 我的文件正在上载到~/domains/DOMAIN/files/storage/app/public/uploads/avatars 但在应用程序中,我看不到这一点。 这是上传代码: 你能帮我做什么吗?

  • 如何在hostgator共享主机上安装laravel php框架PHP版本5.2-AddType application/x-httpd-php53.PHP in.htaccess文件 我的问题:无法使用SSH安装composer:$curl-sShttps://getcomposer.org/installer |php获取错误:缺少phar扩展。请在不禁用phar的情况下安装或重新编译php

  • 我部署我laravel 5.4项目在共享主机上使用子域我安装了作曲家,改变了路径的index.php,供应商路径,DB主机,用户名等。 我得到以下错误 致命错误:未捕获意外值异常:在"/存储/日志"中没有现有目录,并且无法构建:在 /vendor/monolog/monolog/src/Monolog/Handler/StreamH中拒绝权限andler.php:171 我尝试了以下命令:php

  • 我已经开发了一个laravel web应用程序,我必须上传到已经有WordPress应用程序的主机上,文件系统如下所示: 我无法访问根文件夹,无法联机访问公共html,因此我在公共html中创建了两个文件夹(laravel后端,laravel前端)。 所以我所做的就是编辑索引。php以指向类似以下内容的laravel后端文件: 需要DIR/.../laravel后端/引导/autoload.php

  • 我按照本教程安装Laravel 5上共享的cboard主机。一切顺利,但我得到一个错误,当我打开我的网站: 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请通过以下地址与服务器管理员联系:webmaster@naxon.co.il通知他们此错误发生的时间,以及您在此错误之前执行的操作。 有关此错误的详细信息,请参阅服务器错误日志。 此外,尝试使用ErrorDocument处理请

  • 我的问题是:如何在共享网络主机的目录(而不是根目录)中运行laravel应用程序? 对于我的一些客户,我在他们选择的共享虚拟主机的根文件夹中运行Laravel应用程序,并从URL中删除 /public部分。为了完成这项工作,我将index.php移动到根文件夹,并将信息从index.php更改为: 现在我知道这可能会导致安全问题,但我已经找到了解决方案,共享网络主机的情况下。 我用来进行此更改的.