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

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的初始化命令:

  1. 在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
  1. 本地提前执行composer install --no-dev,确保vendor目录已生成,再推送整个项目。

以上方案均无需更换buildpack,可根据你的环境选择适配的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:17:07