我有一些用户需要从数据库中提取大量数据。我正在创建一个接收参数,查询数据库并将数据写入txt文件的作业。文件准备就绪后,我会发送一封通知电子邮件。
要在本地存储文件,我正在作业内部使用Storage门面。
如果我在常规控制器上运行代码,则生成文件,但是当我在作业中运行相同命令时,则不会生成文件(即使已处理作业)。
我正在php 7.2上运行laravel 5.4。并已链接存储(php artisan storage:link)
由于我的代码非常复杂(咨询模型,邮件等),因此我创建了一个简单的测试控制器和一个简单的测试作业,以将文件创建与其余代码隔离开来。简单版本中也会发生同样的问题。
这是控制器:
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');
}
}
我已经检查了文件系统配置,这是默认值。
我原本希望“ Storage / App”文件夹中有两个文件testFile.txt和testFileQueue.txt,但是我只有testFile.txt。