目前,除了始终在线的 apache 代理 php-fpm 之外,我只使用额外的终端选项卡来手动启动工作进程和时钟进程。
当我开始使用heroku时,我尝试了heroku local,但它的设置打败了我。
现在我想再试一次。
我在 High Sierra 上homebrew
php
但到目前为止一直坚持使用 apache 内置的 mac 操作系统。看来brew 的apache 可能是更好的选择,但希望我们能在下文中找到答案。
我从提供的答案中意识到here https://stackoverflow.com/questions/36362484/heroku-php-getting-started-doesn-t-run-locally-on-osx/36449401#36449401(由 buildpack 的顶级贡献者提出)heroku local 使用的 apache 必须在启动 heroku local 时停止。在一个答案中,heroku 支持对此有类似的明显引用here https://stackoverflow.com/questions/33015139/laravel-5-heroku-local-doesnt-work.
我还注意到,我自己的发现,应该在本地安装构建包*
as in composer require --dev heroku/heroku-buildpack-php "*"
以保证最新版本。
现在,当我使用 mac osx 的内置 apache 发出 heroku local 时,我得到以下信息(我让它监听端口 8080 来为我的 php 开发环境提供服务,但为此目的停止了它,使用sudo apachectl stop
).
m$ heroku local
[OKAY] Loaded ENV .env File as KEY=VALUE Format
12:21:03 PM horizon.1 | Horizon started successfully.
12:21:03 PM clock.1 | [2019-09-20 11:21:03] Calling scheduler
12:21:03 PM clock.1 | No scheduled commands are ready to run.
12:21:03 PM web.1 | DOCUMENT_ROOT changed to 'public/'
12:21:04 PM web.1 | 4 processes at 128MB memory limit.
12:21:04 PM web.1 | Starting php-fpm...
12:21:06 PM web.1 | Starting httpd...
12:21:06 PM web.1 | Application ready for connections on port 5000.
12:21:06 PM web.1 | [Fri Sep 20 12:21:06.155117 2019] [core:emerg] [pid 25867] (2)No such file or directory: AH00023: Couldn't create the mpm-accept mutex (file /private/var/run/mpm-accept-0.25867)
12:21:06 PM web.1 | (2)No such file or directory: could not create accept mutex
12:21:06 PM web.1 | AH00015: Unable to open logs
12:21:06 PM web.1 | Process exited unexpectedly: httpd
12:21:06 PM web.1 | Going down, terminating child processes...
[DONE] Killing all processes with signal SIGINT
12:21:06 PM horizon.1 | Shutting down...
12:21:06 PM clock.1 Exited with exit code SIGINT
12:21:06 PM web.1 Exited with exit code null
12:21:07 PM horizon.1 | [2019-09-20 11:21:06][1033] Processing: Laravel\Scout\Jobs\MakeSearchable
12:21:07 PM horizon.1 | [2019-09-20 11:21:06][1032] Processing: Laravel\Scout\Jobs\MakeSearchable
12:21:07 PM horizon.1 | [2019-09-20 11:21:06][1034] Processing: Laravel\Scout\Jobs\MakeSearchable
12:21:08 PM horizon.1 | [2019-09-20 11:21:06][1033] Processed: Laravel\Scout\Jobs\MakeSearchable
12:21:08 PM horizon.1 | [2019-09-20 11:21:06][1032] Processed: Laravel\Scout\Jobs\MakeSearchable
12:21:08 PM horizon.1 | [2019-09-20 11:21:06][1034] Processed: Laravel\Scout\Jobs\MakeSearchable
12:21:08 PM horizon.1 Exited Successfully
我的 mac os apache vhosts 转发到/tmp/php72-fpm.sock
。那里的权限是好的,因为本地浏览器中的apache达到了php-fpm的要求。
我看到实际的错误是(由于没有换行符,它在上面的代码中滚动到右侧):Could not create the mpm-accept mutex
。我现在知道有一些不同的 apache 多处理模块,不确定我是否需要了解更多信息。
但这可能只是权限吗?我注意到 mac osx apache 需要 sudo,如sudo apachectl start
我正在运行heroku local而不需要sudo。我可以尝试sudo heroku local
但我宁愿不知道它会做什么。
因此,在缺乏更多理解的情况下(这会很好),我可能会尝试安装brew apache (httpd24)。看起来 heroku local 只会调用httpd
,因此,将选取路径中的第一个。
部分答案
我意识到,当heroku local启动系统apache时,系统apache当然仍然会拥有其所有当前配置。这意味着写入我添加的 sudo 位置、错误日志、虚拟主机。当然,如果没有sudo,就会出错。解决上述问题的第一步是从 httpd.conf 中删除listen指令,这会产生一个新错误:
(13)Permission denied: AH00091: httpd: could not open error log file /private/var/log/apache2/error_log.
然后我注释掉错误日志来修复该错误日志,这又给出了另一个错误日志:
(2)No such file or directory: AH02291: Cannot access directory '/usr/logs/' for main error log
2:17:25 PM web.1 | AH00014: Configuration check failed
2:17:25 PM web.1 | This program requires Apache 2.4.10 or newer with mod_proxy and mod_proxy_fcgi enabled; check your 'httpd' command.
可以看到这是怎么回事。
基本上,我需要删除几乎所有的 mac osx apaches 配置,以免出错(在没有 sudo 的情况下启动时)。
所以,让我们考虑使用brew apache...(如下)。
值得注意的是,检查/tmp
,每次我运行 heroku local 时,我都会看到以下文件,例如heroku.xxxxx
零字节写如下。我注意到下面的 apache 日志文件可以作为 Log 指令在构建包中包含的默认 vhost 中找到,位于<buildpack>/conf/apache2/heroku.conf
,因此它们存在于此。
mbp:tmp m$ ll
total 8
drwxrwxrwt@ 16 root wheel 512B 20 Sep 08:54 ./
drwxr-xr-x 6 root wheel 192B 31 Dec 2017 ../
srwxrwxrwx 1 root wheel 0B 18 Sep 22:02 .dbfseventsd=
srwxrwxrwx 1 m wheel 0B 20 Sep 07:59 .s.PGSQL.5432=
-rw------- 1 m wheel 49B 20 Sep 07:59 .s.PGSQL.5432.lock
srwxr-xr-x 1 m wheel 0B 8 Sep 21:05 OSL_PIPE_501_SingleOfficeIPC_48607cb6b283d6f2d9ab5973acdb43c=
drwx------ 3 m wheel 96B 27 Aug 17:28 com.apple.launchd.9wuyYAXuof/
drwx------ 3 m wheel 96B 27 Aug 17:28 com.apple.launchd.v9lh33yWhI/
-rw-r--r-- 1 m wheel 0B 20 Sep 08:54 heroku.apache2_access.5000.log
-rw-r--r-- 1 m wheel 0B 20 Sep 08:54 heroku.apache2_error.5000.log
-rw-r--r-- 1 m wheel 0B 20 Sep 08:54 heroku.php-fpm.5000.log
-rw-r--r-- 1 m wheel 0B 20 Sep 08:54 heroku.php-fpm.5000.www.slowlog
-rw-r--r-- 1 m wheel 0B 20 Sep 08:54 heroku.php-fpm.www.5000.log
drwxr-xr-x 3 m wheel 96B 19 Sep 20:23 pear/
srwxrwxrwx 1 m staff 0B 19 Sep 22:11 php72-fpm.sock=
drwxr-xr-x 2 root wheel 64B 19 Sep 08:29 powerlog/
我还能做些什么来帮助网络进程启动?
更新-如何安装brew apache 专用于heroku local?
也许真正有用的是了解安装brew apache 的步骤,因为它仅用于heroku local。是一些简单的brew命令并删除listen指令吗?我在这里很谨慎,因为我希望最好不要损害我当前对内置 apache 的使用;我认为这些应该能够并行运行,只需要在执行之前进行合理确定即可。
Also
Homebrew 现在不再支持公式选项,因此brew install homebrew/apache/httpd24 --with-mpm-event
如给定的在上面的链接 https://stackoverflow.com/questions/36362484/heroku-php-getting-started-doesn-t-run-locally-on-osx/36449401#36449401似乎不再是一个选择。这是可以做的brew edit httpd24
直接编辑公式;有必要吗?正确的安装步骤是什么?