我正在为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
我可以看到该文件实际存在。我不会在本地或其他远程服务器上遇到此问题。为什么会在这里发生?
答案 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
的位置。