Google App Engine无法部署Vendor文件夹问题求助
解决Google App Engine部署后Vendor文件夹缺失的问题
嘿,我来帮你搞定这个头疼的问题——本地好好的Vendor文件夹,部署到GAE后就没了,导致vendor/autoload.php找不到对吧?我给你捋捋原因和解决办法:
为啥会出现这问题?
核心就是本地的Vendor文件夹没被正确传到App Engine上,大概率是下面两个原因之一:
- 你的部署配置(app.yaml)里关于Vendor的规则乱了,导致部署工具没把它传上去
- 项目里的
.gitignore或者.gcloudignore把vendor/目录给排除了,部署时直接跳过了这个文件夹
一步步解决
先检查忽略文件
先去项目根目录看看.gitignore和.gcloudignore这两个文件,要是里面有vendor/这一行,要么给它加个注释(前面加#),要么直接删掉。不然部署工具会默认不上传这个文件夹哦。
修正app.yaml的配置
你现在的app.yaml里关于Vendor的规则重复了,一会儿设成static_dir一会儿设成script,匹配的时候会冲突。我给你简化优化下:
runtime: php55 api_version: 1 handlers: # 处理常规静态文件(html/css/js这些) - url: /(.*\.(htm|html|css|js)$) static_files: \1 upload: (.*\.(htm|html|css|js)$) application_readable: true # 各个静态目录的配置 - url: /stylesheets static_dir: stylesheets - url: /fonts static_dir: fonts - url: /src static_dir: src - url: /image static_dir: image # 处理Vendor里的PHP文件:得让这些脚本能被执行 - url: /vendor/(.*\.php)$ script: vendor/\1 # 处理Vendor里的静态资源(比如一些库自带的css、图片) - url: /vendor/(.*) static_files: vendor/\1 upload: vendor/(.*) application_readable: true # 处理根目录下的PHP文件 - url: /(.+\.php)$ script: \1 # 其他所有请求都走index.php - url: /.* script: index.php
更推荐的做法:让GAE自动装依赖
其实最好别传本地的Vendor文件夹,而是让GAE部署的时候自动跑composer install生成,这样能避免本地和服务器环境依赖不一致的问题。步骤很简单:
- 确保项目根目录有
composer.json和composer.lock这两个文件(别把它们加到忽略文件里,必须上传) - 在app.yaml里加一行配置,告诉GAE要执行composer安装:
runtime: php55 api_version: 1 # 新增这行,指定composer安装命令(--no-dev是跳过开发环境依赖,生产环境用这个刚好) composer_script: "composer install --no-dev" handlers: # 后面的handler规则用刚才优化好的就行 ...
这样部署的时候,GAE会自动读取你的composer文件,安装所有依赖,生成Vendor文件夹,根本不用你手动传本地的。
最后验证下
改完之后,重新跑部署命令:
gcloud app deploy app.yaml
部署完用gcloud app browse打开应用,看看是不是正常运行啦~
内容的提问来源于stack exchange,提问作者emma
相关产品推荐
相关产品推荐

