为什么Heroku找不到我的autoload.php文件?

时间:2015-08-06 22:59:50

标签: php wordpress git heroku composer-php

我正在为Heroku上的Wordpress插件设置演示站点。我的插件使用composer来管理依赖项,并在我的本地安装中配置为git子模块。我推送到heroku,一切似乎都有效。我使用heroku run bash ssh进入应用程序并从我的插件中手动运行composer install。然后我登录网站并尝试激活我的插件......但是我收到以下错误:

Plugin could not be activated because it triggered a fatal error.

Warning: require_once(/app/wp-content/plugins/wp-github-pipeline/vendor/autoload.php): failed to open stream: No such file or directory in /app/wp-content/plugins/wp-github-pipeline/wp-github-pipeline.php on line 23 Fatal error: require_once(): Failed opening required '/app/wp-content/plugins/wp-github-pipeline/vendor/autoload.php' (include_path='.:/app/.heroku/php/lib/php') in /app/wp-content/plugins/wp-github-pipeline/wp-github-pipeline.php on line 23

我不明白。使用heroku run bash我可以看到该文件实际存在。我不会在本地或其他远程服务器上遇到此问题。为什么会在这里发生?

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:0)

我无法肯定地说为什么这有效但看起来Heroku并没有真正与composer.json在项目根目录之外的某个地方很好地合作。所以我拿了我的项目的composer.json并将它移动到项目根目录,然后我添加了......

"config": {
    "vendor-dir": "wp-content/plugins/wp-github-pipeline/vendor"
}

...导致我需要的依赖(和autoload.php)安装在原始位置。

有了这个,我可以毫无问题地正常推送到Heroku。

我不知道为什么我能够在没有它工作的情况下手动运行composer install。我也不知道为什么heroku run bash会向我显示实际上并不存在的文件。

答案 1 :(得分:0)

According to me you have to regenerate the autoload. Hope that you have written code within composer.json for autoloads.

composer dump-autoload

This will regenerate your autoload and it will solve your problem. If not please modify your question by pasting your composer.json.

答案 2 :(得分:0)

我要解决的问题是在我的include_path文件中添加.user.ini。该ini文件需要位于文档根目录中,而不是应用程序的根目录。

  

include_path ="。:/ app / .heroku / php / lib / php:/ app / vendor /"

请勿逐字复制我的include_path示例,因为它现在可能是您的应用所需的包含路径。从Heroku的错误日志中获取您当前的包含路径,然后将:/app/vendor附加到其中。

在include_path中添加/app/vendor/非常重要。这会将您的require php语句指向Heroku放置autoload.php的位置。