Laravel Queue Standalone "isDownForMaintenance" Ошибка - PullRequest
0 голосов
/ 24 июня 2018

Я использую очередь Laravel в качестве отдельного приложения, и у меня есть все для запуска, кроме этой единственной ошибки, которую я продолжаю получать.

Неустранимая ошибка PHP: необработанная ошибка: вызов неопределенного метода Осветить \ Контейнер \ Контейнер :: isDownForMaintenance ()

На форуме Laravel было исправление, опубликованное год назад, но, похоже, оно не работает. Решение было

<?php 
use Illuminate\Container\Container as IlluminateContainer;

class Container extends IlluminateContainer {   
     public function isDownForMaintenance() {
           return false;   
     } 
}

Ни у кого нет решения для этого?

Весь код:

<?php

use \Illuminate\Contracts\Debug\ExceptionHandler;
use Illuminate\Queue\Capsule\Manager as QueueManager;
use Illuminate\Redis\Database;
use Illuminate\Queue\Worker;
use Illuminate\Events\Dispatcher;
use Illuminate\Queue\WorkerOptions;
use Illuminate\Container\Container as IlluminateContainer;

require __DIR__ . '/../../../vendor/autoload.php';
//require __DIR__ . '/Main.php';
//require __DIR__ . '/Fix.php';


class Container extends IlluminateContainer
{
  public function isDownForMaintenance() {
    return false;
  }
}


class TasksDomain
{
    public function fire($job, $asssetID)
    {
        // Task for domain
        $domain = DomainsMongo::collection('domains')->where('_id', $assetID)->first();
        echo $domain->Domain;
    }
}

class MyQueueException implements ExceptionHandler
{
    /**
     * Report or log an exception.
     *
     * @param  \Exception  $e
     * @return void
     */
    public function report(\Exception $e)
    {
        //处理异常
    }
    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $e
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function render($request, \Exception $e)
    {
    }
    /**
     * Render an exception to the console.
     *
     * @param  \Symfony\Component\Console\Output\OutputInterface  $output
     * @param  \Exception  $e
     * @return void
     */
    public function renderForConsole($output, \Exception $e)
    {
        $this->report($e);
    }
  }

  $queue = new QueueManager;

  $container = $queue->getContainer();

  $container['config']['database.redis'] = [
    'client' => 'predis',
    'cluster' => false,
    'default' => [
        'host' => getenv('REDIS_HOST'),
        'port' => getenv('REDIS_PORT'),
        'password' => getenv('REDIST_PASSWORD'),
        'database' => 0,
    ],
  ];

  $container->singleton('redis', function ($container) {
    return new Database($container['config']['database.redis']);
  });

  $container['config']["queue.connections.redis"] = [
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'default',
    'retry_after' => 30,
  ];

  $queue->addConnection([
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'default',
    'retry_after' => 30,
  ]);

  $queue->setAsGlobal();

  $dispatcher = new Dispatcher();
  $worker = new Worker($queue->getQueueManager(), $dispatcher, new IntelX\Library\Tasks\TasksQueueException());
  $options = new WorkerOptions();
  $options->maxTries = 3;
  $options->timeOut = 300;
  $worker->daemon('redis', 'default', $options);

1 Ответ

0 голосов
/ 25 июня 2018

Нашел ответ!Я собираюсь опубликовать это для будущих разработчиков, так как решение на LaraCasts не работает!

Решение:

use Illuminate\Container\Container;
use Illuminate\Queue\Capsule\Manager as QueueManager;

class Application extends Container
{
    public function isDownForMaintenance()
    {
        return false;
    }
}

$queue = new QueueManager(new Application());
...