У меня есть пользователи, которым нужно извлечь большой объем данных из базы данных. Я создаю работу, которая получает параметры, запрашивает базу данных и записывает данные в текстовый файл. И когда файл будет готов, я отправлю уведомление по электронной почте.
Для локального хранения файла я использую фасад Storage внутри задания.
Если я запускаю свой код на обычном контроллере, файл генерируется, но когда я выполняю ту же команду внутри задания, файл не генерируется (даже если задание обработано).
Я использую laravel 5.4 на php 7.2. и связали хранилище (хранилище php artisan: ссылка)
Поскольку мой код очень сложен (консультации с моделями, почта и т. Д.), Я создал простой тестовый контроллер и простое тестовое задание, чтобы изолировать создание файла от остальной части кода. Та же проблема происходит в простой версии.
Вот контроллер:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Storage;
use App\Jobs\testeStorageJob;
class testController extends Controller
{
public function test(){
Storage::put('testFile.txt', 'Some Content on a regular controller');
testeStorageJob::dispatch();
}
}
и вот работа:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Storage;
class testeStorageJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 1;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Storage::put('testFileQueue.txt', 'Some content on a queue');
}
}
Я проверил конфигурацию файловой системы, и это значения по умолчанию.
Я ожидал иметь 2 файла в папке «Storage / App» testFile.txt и testFileQueue.txt, но у меня есть только testFile.txt.