Laravel 8.55和使用S3文件上传的队列行为



我继承了一些Laravel代码(目前运行8.55版本),有一项作业是通过网页上传CSV文件启动的。

该CSV文件上传到S3存储桶中,进行处理(使用Laravel Excel),导致数据库条目更新,发送一封报告作业完成的电子邮件,然后从S3中删除CSV文件。

我的开发环境是使用MySql的Windows11(PhpStorm),"php artisan serve"是我使用的Web服务器。

排队的作业在我的本地环境中正常工作。当在生产中尝试(托管在heroku上)时,文件被成功上传到我正在使用的S3存储桶,然后出现以下错误结果(在Bugsnag中报告),作业失败(在failed_jobs表中添加一个条目):

IlluminateContractsFilesystemFileNotFoundExceptionMaatwebsiteExcelJobsReadChunk
File not found at path: laravel-excel-3svOWxojWikYEuWZuBBBHlbXl6WpK7Xb.csv

这是启动作业的上传脚本中的代码摘录:

$file = $request->file('filename');
$f_ori_name = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$file_name = Str::random(40).'.'.$extension;
$tmp_path = Storage::disk('s3_temp')->put($file_name, file_get_contents($file->getRealPath()));
$path = Storage::disk('s3_temp')->path($file_name);
$var = (new MembersImport($currentPerson, $import_detail))->queue($path, 's3_temp')
->chain([
new ImportDetailsUpdateJob($import_detail),
new NotifyUserOfCompletedImport($currentPerson, $import_detail),
function () use ($path) {
Storage::disk('s3_temp')->delete($path);
}
])->onConnection('database')
->onQueue('default');

我不知所措,因为这完全是在当地进行的。

@matiaslauriti指出的答案是,在处理生产队列的一个环境中,AWS密钥不正确。

相关内容

  • 没有找到相关文章

最新更新