繁体   English   中英

“RuntimeException:尚未设置立面根”

[英]"RuntimeException: a facade root has not been set"

我在我正在处理的 Laravel 零项目中遇到问题。 我正在处理一个处理 2 个磁盘(1 个 SFTP 和另一个本地磁盘)之间的直接文件传输的命令。

我已经正确配置并测试了我能够使用下面的Storage代码在它们之间传输文件。 当我尝试使用spatie/async package 创建并发传输池(或者可能只是我尝试这样做的方式)来执行此操作时,会出现我的问题。

$pool = Pool::create()
        ->concurrency($limit);

$progress = $this->output->createProgressBar($file_list);

if(!Storage::disk('local')->exists($local_folder_path)) {
    Storage::disk('local')->makeDirectory($local_folder_path);
}

foreach($file_list as $filename => $remote_path) {
    $pool->add(function() use ($remote_path, $filename, $local_folder_path) {
        Storage::disk('local')
            ->writeStream(
                "{$local_folder_path}/{$filename}",
                 Storage::disk('remote')->readStream($remote_path)
            );

        return $filename;
    })->then(function($filename) use (&$progress) {
        $this->info("{$filename} downloaded");
        $progress->advance();
    })->catch(function($exception) {
        $this->error($exception);
    });
}

$pool->wait();
$progress->finish();

顺便说一下,错误RuntimeException: a facade root has not been set正在通过池中第一项的catch()处理程序打印到我的控制台。 我确实发现了这么多。

我已经搜索了这个问题的答案,但我遇到的所有文章和其他 SO/Stack Exchange 帖子似乎与导致我的问题的原因都不相似。

在此先感谢您的帮助。

问题是您的回调(子进程)在没有任何设置的情况下运行。

在您需要在子进程中进行更多设置工作的情况下,任务很有用。 因为子进程总是从无到有,所以您很可能想要初始化,例如。 执行任务之前的依赖容器。

外观由运行\LaravelZero\Framework\Bootstrap\RegisterFacades::class的 kernel 设置。

您可以创建 kernel 的实例并运行引导方法以正确设置外观。

$pool->add(function() use ($remote_path, $filename, $local_folder_path) {
        $app = require __DIR__.'/../../bootstrap/app.php';

        $kernel = $app->make(\Illuminate\Contracts\Console\Kernel::class);

        $kernel->bootstrap();

        Storage::disk('local')
            ->writeStream(
                "{$local_folder_path}/{$filename}",
                 Storage::disk('remote')->readStream($remote_path)
            );

        return $filename;
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM