chown -R $user:www-data storage命令在Heroku bash中不生效如何处理?
问题原因
Heroku的dyno使用临时易失性文件系统,且默认运行PHP服务的用户为动态生成的非特权用户,你执行chown -R $user:www-data storage失败主要有两个核心原因:
- Heroku默认没有给普通用户开放sudo权限,你没有修改文件所有者的权限,所有chown类修改所有者的操作都会被拒绝
- 就算你临时修改成功,只要dyno重启、重新部署,所有文件系统的变更都会被重置,手动执行chown没有实际意义
解决步骤
针对Laravel 7 + PHP 7.4在Heroku的storage目录权限问题,按以下步骤操作即可:
- 确认项目根目录下的
Procfile内容正确,示例如下:# 用Apache的场景 web: vendor/bin/heroku-php-apache2 public/ # 用Nginx的场景替换为下面的内容 # web: vendor/bin/heroku-php-nginx public/ - 在项目根目录的
composer.json中添加部署后自动执行的权限配置钩子:{ "scripts": { "post-install-cmd": [ "chmod -R 775 storage", "chmod -R 775 bootstrap/cache", "php artisan optimize:clear" ] } } - 将以上两处修改提交到代码仓库后重新部署即可,不需要手动进入bash执行权限修改命令,Heroku官方PHP buildpack会自动保证运行进程对storage目录有读写权限。
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

