簡體   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