![](/img/trans.png)
[英]Fatal error: Uncaught RuntimeException: A facade root has not been set
[英]"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.