Laravel 5在Heroku本地环境下无法运行。

3

我已经成功将Laravel应用部署到Heroku上。

它在线上可以正常运行。

但是,当我尝试运行"heroku local"时,出现以下错误:

vendor/bin/heroku-php-apache2: 没有这个文件或目录

这很有道理,因为在查看"vendor/bin"时,唯一列出的内容是:

psysh -> ../psy/psysh/bin/psysh

那么,我的heroku-php-apache在哪里?或者我该如何解决这个问题?

3个回答

10

你的 composer.json 文件中应该包含以下几行:

"require-dev": {
    "heroku/heroku-buildpack-php": "*"
 }

请确保在添加它们后运行 composer update


谢谢。我很想给你点赞,但我的声望不允许这样做。这个问题在其他地方有提到吗?这是一些非常基础的东西,但我在Heroku的文档中没有找到相关内容(例如)。 - Jonathan Soifer
如果您已经安装了Composer,您还可以运行composer require --dev "heroku/heroku-buildpack-php:*"来声明应用程序依赖项。 - Andrei C

6
经过大量的研究,试错以及与Heroku支持团队的交流,我发现Slow Loris的回答虽然是这个过程的一部分,但下面的回答是由Heroku Support告诉我的:
简而言之,heroku local不支持PHP应用程序。原因是与我们在平台上支持的所有其他语言不同,PHP没有在用户空间编写的Web服务器。相反,我们使用PHP-FPM与Apache或Nginx配合使用,启动脚本(vendor/bin/heroku-(php|hhvm)-(apache2|nginx))动态注入正确的端口绑定和FastCGI通信套接字的配置。
这适用于原始的PHP和Apache构建,前提是:
1)当前用户具有所有正确的权限(在您的情况下,/var/log/apache2/不可写); 2)在主httpd.conf中加载了正确的代理模块; 3)主要的httpd.conf根本没有绑定到任何端口,或者至少不绑定到一个低于1024的端口(这些端口保留给超级用户)。
每个用户还需要自己处理主配置文件,因为有时要加载的模块在libexec/中,有时在lib/apache2/modules/中等等。太多的变化了;否则,我们可以向用户提供完整的Apache配置,并且体验会更好。
但问题并没有结束。FPM根本无法在Windows上工作,在大多数Linux系统上,httpd不是有效的命令;相反,apache2ctl负责启动和停止,因此无法在前台运行服务器。最终,系统配置中可能有太多的可能排列组合,使得无法确保每个用户都有良好的体验。
这只是PHP领域的现实。Ruby、Python、Node、Java都有各自语言编写的Web服务器,不需要外部服务器。这也使得文件上传流式传输、处理Web套接字升级等操作成为可能。也许在PHP 7中我们会很快看到类似的东西出现(在PHP 5中根本不可行,因为致命错误会导致引擎崩溃,因此您的Web服务器也会消失)。

回来了,因为答案未被接受,但并不失望。我想你能做的最好的就是运行一个Web服务器,用老式的方法来完成它。 - Andrei C

1

我知道这个问题有点过时,但最近我第一次部署Heroku应用程序时无法让heroku local正常工作。我使用的是Laravel的当前分支5.8,在Windows 10上使用VS Code。我四处搜寻尝试解决此问题,但无论如何都无法使其正常工作。

我想出了一个解决方案,只需要在终端中输入几行命令就可以在本地工作。

在VS Code中,我使用gitbash终端,进入我的Heroku项目文件夹后,运行composer require laravel/homestead --dev,等待完成后,我们需要安装Homestead,运行vendor/bin/homestead make,然后等待完成后,只需运行vagrant up,您的应用程序将通过localhost:8000访问。

文档-https://laravel.com/docs/5.8/homestead

希望这能帮助到某些人!


1
太好了,非常感谢您!!!我和我的朋友花了两个小时都没能自己解决。 - Alex Rindone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接