【问题标题】:"RuntimeException: a facade root has not been set"“RuntimeException:尚未设置外观根”
【发布时间】:2020-10-24 16:10:28
【问题描述】:

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

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

$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 帖子似乎都与导致我的问题的原因不相似。

提前感谢您的帮助。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

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

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

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

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

    $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;
        })
    

    【讨论】:

    • 哦,有趣...谢谢,我会试一试。
    • @JSn1nj4 好的,请告诉我进展如何。
    • 我可能要到明天才能做到,但到时候我一定会告诉你的。
    • 这解决了我遇到的问题。谢谢!每天学习新东西。 :)
    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 2019-05-22
    • 2020-05-18
    • 2020-08-22
    • 2019-11-05
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多