【问题标题】:Laravel Seeder error Cannot write to directory "public/storage/.."Laravel Seeder 错误无法写入目录“public/storage/..”
【发布时间】:2021-06-07 17:05:14
【问题描述】:

我在我创建目录的 laravel 中得到了这个 DatabaseSeeder.php:

public function run()
    {
        Storage::deleteDirectory('posts');
        Storage::makeDirectory('posts');
        // Etcetera ...
    } 

然后我跑

$ php artisan migrate:fresh --seed

这在我的开发环境(Laravel Homestead)中完美运行。

但是,如果我使用 Laradock 在 Docker 容器中运行相同的命令,则会收到以下错误:

播种:数据库\Seeders\PostsSeeder

无效参数异常

无法写入目录“public/storage/posts”

在供应商/fakerphp/faker/src/Faker/Provider/Image.php:90 86▕){ 87▕ $dir = is_null($dir) ? sys_get_temp_dir() : $dir; // GNU/Linux/OS X/Windows 兼容 88▕ // 验证目录路径 89▕ if (!is_dir($dir) || !is_writable($dir)) { ➜ 90▕ throw new \InvalidArgumentException(sprintf('无法写入目录 "%s"', $dir)); 91▕} 92▕ 93▕ // 生成一个随机文件名。使用服务器地址,以便一个文件 94▕ //在不同的服务器上同时生成不会发生冲突。

+3 供应商框架 数据库/工厂/ImageFactory.php:25

Faker\Generator::__call()

为什么会这样?

我该如何解决?


解决方法

要轻松解决它,只需创建这些目录:

$ ls -lah public/
$ cd public/ && mkdir storage && cd storage && mkdir posts && cd ../..

再试一次

$ artisan migrate:refresh --seed

【问题讨论】:

  • 您是否尝试为您的存储文件夹授予权限?

标签: laravel laradock


【解决方案1】:

这个错误是因为你的“工厂”文件之一,在这种情况下的“faker”方法中,“posts”文件夹不存在。

Faker 无法创建新文件夹,并且由于该文件夹不存在,我收到了该错误。

所以在这种情况下,您必须先创建帖子文件夹。为此,在“DatabaseSeeder.php”文件中,将以下代码行放在 run() 方法的开头:

use Illuminate\Support\Facades\Storage;

public function run()
    {
        Storage::deleteDirectory('public/posts');
        Storage::makeDirectory('public/posts');
        ...
    }

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我使用解决方法创建了文件夹,它可以工作,但运行 artisan migrate: refresh --seed 不会删除目录,而是创建更多目录。

    public function run()
    {
        Storage::deleteDirectory('posts');
        Storage::makeDirectory('posts');
        // Etcetera ...
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-30
      • 2018-12-19
      • 1970-01-01
      • 2023-02-14
      • 2016-04-22
      • 2020-10-31
      • 2018-10-19
      • 1970-01-01
      相关资源
      最近更新 更多