You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5使用Deployer部署时storage:link执行失败原因咨询

我来帮你解决这个Deployer部署Laravel 5.5时遇到的storage软链接问题,这个坑我之前也踩过,咱们一步步来搞定它:

问题根源分析

你遇到的错误本质是:本地开发环境创建的public/storage软链接(指向你Mac上的本地路径)被意外同步到了服务器的部署版本中,服务器上根本找不到这个本地路径,导致执行artisan storage:link时,要么因为目标路径已存在(损坏的软链接)无法创建,要么找不到要链接的目标目录,直接抛出symlink(): No such file or directory错误。

分步解决方案

1. 先清理本地环境,避免坏软链接被重复部署

  • 先删除本地项目里的损坏软链接:
    rm public/storage
    
  • 打开你的.gitignore文件,添加一行public/storage,把这个软链接排除在版本控制之外,防止以后误提交到Git仓库。

2. 修改Deployer脚本,强制清理服务器上的旧软链接

在你的deploy.php部署脚本里,自定义一个storage:link任务,确保在创建新软链接前,先删除服务器上已存在的public/storage(不管它是文件、目录还是损坏的软链接):

task('storage:link', function () {
    // 先强制删除已存在的public/storage,避免冲突
    run('rm -rf {{release_path}}/public/storage');
    // 执行Laravel的storage:link命令创建新软链接
    run('{{bin/php}} {{release_path}}/artisan storage:link');
});

// 把这个任务挂到Deployer的部署流程中,比如在deploy:vendors之后执行
after('deploy:vendors', 'storage:link');

3. 配置共享目录,让存储文件跨版本共享

Laravel的storage/app/public目录通常存储用户上传的文件,这些文件不应该随每次部署更新而被覆盖,所以在deploy.php里配置共享目录:

set('shared_dirs', [
    'storage/app',
    'storage/framework/cache',
    'storage/framework/sessions',
    'storage/framework/views',
    'storage/logs',
]);

这样Deployer会自动把storage/app目录设置为共享目录,每次部署的新版本都会链接到这个共享目录,确保上传的文件不会丢失,同时storage:link创建的软链接也会指向这个共享的storage/app/public。

4. 重新部署验证

执行Deployer的部署命令:

dep deploy production

这次应该就能顺利创建软链接,不会再出现之前的错误了。


内容的提问来源于stack exchange,提问作者Ilya Vo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:08