【问题标题】:Heroku PHP “Getting Started” doesn’t run locally on OSXHeroku PHP“入门”不在 OSX 上本地运行
【发布时间】:2016-07-21 14:57:56
【问题描述】:

我正在尝试让这个存储库在 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

有什么想法会导致设置 :80 时出现权限被拒绝错误,即使我 sudo 也是如此?或者为什么 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

【问题讨论】:

    标签: php macos heroku


    【解决方案1】:

    因为“heroku local”依赖于可预测的环境,所以 PHP 应用程序不支持它。与 Ruby、Python、Node、Java 等不同,其中侦听流量的 Web 服务器是用这些各自的语言编写的,PHP 应用程序与 Apache 或 Nginx 一起启动 PHP-FPM(已经排除了例如 Windows)。

    启动时动态注入的配置是动态注入的,因此您需要一个非常标准的 PHP 和 Nginx(例如,Debian 等将无法工作,因为它甚至没有工作的“nginx”或“httpd”可以启动的二进制文件)。仅兼容 Nginx 1.8; Apache 需要启用一些模块(主要是 mod_proxy_fcgi),并且不能绑定到本地端口。

    这意味着 Heroku 必须为无数不同的客户特定的本地设置提供支持,所以最好的答案是“就像你一直做的那样为你的应用设置一个虚拟主机并使用例如 @ 987654321@ 用于您的环境变量”。也就是说,不幸的是,目前 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 (brew install homebrew/apache/httpd24 --with-mpm-event) 的 Apache。在全局配置中(/usr/local/etc/apache2/),启用mod_proxymod_proxy_fcgi,并注释掉Listen 指令。

    【讨论】:

    • 谢谢!它对我有用。现在唯一的问题是,当我停止进程时:CTRL+C,它永远无法杀死进程,它需要永远:[WARN] 被用户中断 [DONE] 用信号 SIGINT 杀死所有进程
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2012-07-04
    • 2015-12-09
    • 2021-08-31
    相关资源
    最近更新 更多