Люмену не хватает памяти при вызове диспетчеризации - PullRequest
0 голосов
/ 14 мая 2018

Я получаю следующую ошибку при попытке вызвать dispatch в моем проекте Lumen:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in /var/www/vendor/illuminate/container/Container.php on line 707

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in Unknown on line 0

Моей первой мыслью было увеличение лимита памяти в php.ini до 1G, но процесс продолжает поглощать всю память приложения, а затем выдает вышеуказанную ошибку.

Внутри моего контроллера у меня есть следующий фрагмент кода:

private function attemptCapture(array $options = [])
{
    $response = array_merge(
        [
            'code' => 200,
            'message' => '',
        ],
        []
    );

    dispatch(new ExampleJob());

    return $response;
}

ExampleJob.php

namespace App\Jobs;

use Illuminate\Support\Facades\Log;

class ExampleJob extends Job
{
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        // dd('got here');  // this gets called
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('got here');
    }
}

Я использую Laravel queue.php по умолчанию в моем файле /config/queue.php, и я использую redis в качестве QUEUE_DRIVER, и я использую default в качестве QUEUE_REDIS_CONNECTION, поскольку я предполагаю, что будет использовать соединение, которое я установил в моем redis['default'] в database.php

Я озадачен тем, почему это не удается, я получаю те же результаты, даже если я использую драйвер sync, диспетчер просто кажется, что испортил

EDIT После некоторых дальнейших экспериментов кажется, что когда я вызываю dispatch из контроллера (переданного по HTTP-маршруту), диспетчер попытается снова вызвать маршрут вместо того, чтобы запустить задание или нажать задание в очередь.

Этот код вызывается в цепочке отправки:

protected function callActionOnArrayBasedRoute($routeInfo)
{
    $action = $routeInfo[1];

    if (isset($action['uses'])) {
        return $this->prepareResponse($this->callControllerAction($routeInfo));
    }

        foreach ($action as $value) {
            if ($value instanceof Closure) {
                $closure = $value->bindTo(new RoutingClosure);
                break;
            }
        }

        try {
            return $this->prepareResponse($this->call($closure, $routeInfo[2]));
        } catch (HttpResponseException $e) {
            return $e->getResponse();
        }
}

Который имеет: array(1) { ["uses"]=> string(52) "App\Http\Controllers\Operator\CaptureController@test" } в качестве полезной нагрузки, которую он получает.

Я не пытаюсь отправить новое действие @test, я хочу отправить ExampleJob

...