Cloud Foundry部署Laravel遇"Could not open input file: artisan"错误求助
解决CF CLI推送Laravel应用时"Could not open input file: artisan"的问题
针对编译阶段Composer执行@php artisan package:discover --ansi找不到artisan文件的问题,以下是几个无需更换buildpack的解决办法:
方案1:修改Composer脚本,添加文件存在判断
编辑项目根目录的composer.json,修改post-autoload-dump脚本,仅在artisan文件存在时执行命令:
"scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "if [ -f artisan ]; then php artisan package:discover --ansi; fi" ] }
修改后执行composer dump-autoload更新配置,再重新推送。这个方法能避免编译阶段因文件路径问题导致的报错。
方案2:在manifest.yml中指定正确工作目录
检查你的manifest.yml,确保PHP buildpack使用的工作目录指向Laravel项目根目录(即artisan所在目录)。添加或修改如下配置:
applications: - name: your-app-name path: ./app # 对应你创建的laravel项目目录 env: PHP_WORKING_DIR: /app # 确保该路径是容器内artisan所在的绝对路径
如果你的项目是直接在当前目录创建的(不是app子目录),则path设为.即可。
方案3:跳过Composer编译阶段脚本,在启动时执行命令
通过环境变量让CF的PHP buildpack在编译阶段不执行Composer的post脚本,转而在应用启动时手动运行Laravel的初始化命令:
- 在
manifest.yml中添加环境变量和启动命令:
applications: - name: your-app-name env: COMPOSER_INSTALL_FLAGS: "--no-dev --no-scripts" # 跳过Composer的post-install/post-autoload-dump脚本 command: | php artisan package:discover --ansi php artisan config:cache php artisan route:cache php -S 0.0.0.0:$PORT public/index.php
- 本地提前执行
composer install --no-dev,确保vendor目录已生成,再推送整个项目。
以上方案均无需更换buildpack,可根据你的环境选择适配的方法。
内容的提问来源于stack exchange,提问作者Skakuz
相关产品推荐
相关产品推荐

