Heroku PHP的“入门指南”在OSX本地无法运行

4
我正在尝试在OSX 10.11.1 (Capitan)本地运行此存储库。使用以下命令:https://github.com/heroku/php-getting-started.git
$ sudo heroku local web

但是我只能做到这一步

[OKAY] Loaded ENV .env File as KEY=VALUE Format
[OKAY] Trimming display Output to 151 Columns
17:30:30 web.1 |  DOCUMENT_ROOT changed to 'web/'
17:30:30 web.1 |  4 processes at 128MB memory limit.
17:30:30 web.1 |  Starting php-fpm...
17:30:32 web.1 |  Starting httpd...
17:30:32 web.1 |  Application ready for connections on port 8080.
17:30:32 web.1 |  (13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
17:30:32 web.1 |  (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
17:30:32 web.1 |  no listening sockets available, shutting down
17:30:32 web.1 |  AH00015: Unable to open logs
17:30:32 web.1 |  Process exited unexpectedly: httpd
17:30:32 web.1 |  Going down, terminating child processes...
[DONE] Killing all processes with signal  null
17:30:32 web.1 Exited Abnormally

有什么想法会导致即使我使用sudo也无法设置:80端口的权限被拒绝错误吗?或者为什么heroku local会尝试使用端口80呢?
在部署到Heroku后一切都运行得很好。
这是完整的教程:https://devcenter.heroku.com/articles/getting-started-with-php 编辑:
当我尝试手动设置端口时:
$ heroku local web -p 5000

它只是将默认的8080端口更改为5000...

[OKAY] Loaded ENV .env File as KEY=VALUE Format
[OKAY] Trimming display Output to 151 Columns
08:06:33 web.1 |  DOCUMENT_ROOT changed to 'web/'
08:06:33 web.1 |  4 processes at 128MB memory limit.
08:06:33 web.1 |  Starting php-fpm...
08:06:35 web.1 |  Starting httpd...
08:06:35 web.1 |  Application ready for connections on port 5000.
08:06:35 web.1 |  (13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
08:06:35 web.1 |  (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
08:06:35 web.1 |  no listening sockets available, shutting down
08:06:35 web.1 |  AH00015: Unable to open logs
08:06:35 web.1 |  Process exited unexpectedly: httpd
08:06:35 web.1 |  Going down, terminating child processes...
[DONE] Killing all processes with signal  null
08:06:35 web.1 Exited Abnormally
1个回答

8
因为“heroku local”依赖于可预测的环境,因此不支持PHP应用程序。与Ruby、Python、Node、Java等不同,这些语言中监听流量的 Web 服务器都是用相应语言编写的。PHP 应用程序会启动 PHP-FPM(例如 Windows 就已经被排除在外),以及 Apache 或 Nginx。
要使其工作,必须在启动时动态注入一个配置,因此您需要一个非常标准的 PHP 和 Nginx(例如 Debian 不适用,因为它甚至没有可供启动的 “nginx” 或 “httpd” 二进制文件)。只有 Nginx 1.8 是兼容的;Apache 需要启用一些模块(主要是 mod_proxy_fcgi),并且不能绑定到本地端口。
这意味着 Heroku 必须为许多不同的客户特定本地设置提供支持,因此最好的答案是“只需像往常一样为应用程序设置虚拟主机,并使用例如 https://packagist.org/packages/josegonzalez/dotenv 来设置环境变量”。不幸的是,这就是 PHP Web 服务器设置的现状。
在您的特定情况下,Apache 正在启动,然后加载其 /etc/apache2/httpd.conf 配置,其中它绑定到端口 80。这不是 heroku-php-apache2 引导脚本可以防止的,因为它必须提供与您特定环境相匹配的配置,这是不可能的,因为它无法了解您本地系统配置的所有方面,例如要加载哪些模块,或者它们甚至在哪里 - 它们是否驻留在 /usr/libexec/apache2//usr/local/apache2/modules/ 或其他什么地方(Apache 支持多种目录布局)。 解决方案 您仍然可以尝试让它工作;在 Mac OS 上非常容易实现。我总是使用来自 https://github.com/Homebrew/homebrew-apache 的 Apache(brew install homebrew/apache/httpd24 --with-mpm-event)。在全局配置文件(/usr/local/etc/apache2/)中启用 mod_proxymod_proxy_fcgi,并注释掉 Listen 指令。

1
谢谢!对我有用。现在唯一的问题是,当我停止进程(CTRL+C)时,它永远无法杀死进程,会花费很长时间:[WARN] 被用户中断 [DONE] 使用信号SIGINT杀死所有进程 - mishaker
请参考以下链接以了解更多信息:https://stackoverflow.com/questions/58024812/heroku-local-with-php-on-mac-os-x - mwal

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