Heroku Local с PHP на Mac OS X - PullRequest
       2

Heroku Local с PHP на Mac OS X

0 голосов
/ 20 сентября 2019

В настоящее время я просто использую дополнительные вкладки терминала, чтобы вручную запускать рабочие и тактовые процессы в дополнение к постоянно включенному apache, проксирующему php-fpm.

Я пробовал локальную героку, когда начинал с heroku, но ее настройка победила меня.

Теперь я хочу попробовать еще раз.

Я в Высшей Сьерре с homebrew php но до сих пор придерживались встроенной в Apache Mac OS.Похоже, Apache Brew может быть лучшим выбором, но, надеюсь, мы узнаем, если это так в следующем.

Я понимаю, из ответа, предоставленного здесь (от главного автора в buildpack)что Apache, используемый Heroku Local, должен быть остановлен во время запуска Heroku Local.Есть аналогичная очевидная цитата из поддержки heroku по этому поводу в ответе здесь .

Я также отмечаю, мое собственное открытие, что нужно установить пакет сборки локально с *, как в composer require-dev heroku/heroku-buildpack-php "*" для обеспечения последней версии.

Прямо сейчас я получаю следующее, когда выдаю heroku local, используя встроенный в Mac OSX Apache (он прослушивает порт 8080 для обслуживания среды php dev, но остановил егодля этого с 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 возвращается к /tmp/php72-fpm.sock.Разрешения там в порядке, так как apache в локальном браузере достигает php-fpm штрафа.

Я вижу, что настоящая ошибка (она прокручивается вправо в коде выше из-за отсутствия перевода строки): Could not create the mpm-accept mutex.Теперь я знаю, что есть несколько различных модулей обработки Apache, но я не уверен, что мне нужно больше об этом знать.

Но возможно ли, что это просто разрешения?Я заметил, что Mac OSX Apache нуждается в sudo, как в sudo apachectl start, и я запускаю локальную героку без sudo.Я мог бы попробовать sudo heroku local, но предпочел бы, пока я не знаю, что он будет делать.

Так что в отсутствие большего понимания (что было бы неплохо) я могу попытаться установить brew apache (httpd24).Похоже, что локальный герой просто позвонит httpd, поэтому будет выбран первый в пути.

Частичный ответ

Я понял, что когда локальный герой запускает систему apache, системаУ apache, конечно же, останутся все текущие настройки.Это означает запись в места расположения sudo, журналы ошибок, vhosts, которые я добавил.Конечно, это будет ошибка без sudo.Первым шагом для исправления вышеуказанного было удаление директивы listen из httpd.conf, которая выдала новую ошибку:

(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 Apache, чтобы она не вызывала ошибок (при запуске без sudo).

Итак, давайте рассмотрим brew apache вместо этого (ниже).

Заметим, что при проверке /tmp каждый раз, когда я запускаю heroku local, я вижу следующие файлы, такие как heroku.xxxxx, записанные как ноль байтов ниже.Я отмечаю, что приведенные ниже файлы журнала apache можно найти в виде директив Log в vhost по умолчанию, включенном в buildpack, в <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, учитывая, что он будетбыть использованным только для героку местным.Это несколько простых команд brew и удалить директиву listen?Я здесь осторожен, так как в идеале хотел бы не навредить моему текущему использованию встроенного apache;я думаю, они должны быть в состоянии работать рядом друг с другом, просто нужно быть достаточно уверенным, прежде чем я это сделаю.

Также

Homebrew больше не поддерживает параметры формул, поэтому brew install homebrew/apache/httpd24 --with-mpm-eventкак указано по ссылке выше больше не представляется возможным.Можно сделать brew edit httpd24 для непосредственного редактирования формулы;это необходимо?Каковы правильные шаги установки?

1 Ответ

0 голосов
/ 20 сентября 2019

Я публикую здесь частичный ответ, который я обновлю по мере того, как узнаю больше, а не добавляю эту дополнительную информацию к самому вопросу.

Я получил его, работая с brew apache следующим образом:

brew install httpd

Редактировать /usr/local/etc/httpd/httpd.conf:

  • строка комментария Listen 8080
  • комментарий в строке LoadModule proxy_module lib/httpd/modules/mod_proxy.so
  • комментарий в строке LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so
  • комментарий в ServerName, я установил его на ServerName localhost:5000 (это подавляет жалобу, которую он подает - это правильное значение для ServerName?)

Отредактируйте /usr/local/etc/httpd/extra/httpd-ssl.conf следующим образом:

  • закомментируйте Listen 8443

Не выполняйте brew services start httpd, как это обычно делается для обслуживания заваривания, то естьне имеет отношения к нам здесь.(Теперь, когда мы закомментировали директивы Listen, httpd все равно не будет отвечать, пока heroku local не запустит его и не введет директиву Listen).

Есть одна область, которую я не делаюполностью понимаю пока.Теперь, когда я запускаю heroku local, я могу получить доступ к своему сайту по адресу localhost: 5000, но только на первой странице.Нажатие на любую подстраницу возвращает:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>

Возможно, мы сможем это исправить позже.Но давайте теперь рассмотрим php-fpm.

Во-первых, у меня была одна легко исправимая ошибка, которая заключается в том, что heroku local использовал php-fpm для mac osx (версия 7.1 на моей High Sierra), которую я исправил, убедившись, чтоФормула php7.2 (это только бочонок; я скоро перейду к php7.3) стоит первой в пути.Теперь which php-fpm возвращает /usr/local/opt/php@7.2/sbin/php-fpm, а не /usr/sbin/php-fpm (встроенный Mac OSX).Итак, теперь мы получили это, используя версию, которую мы намереваемся.Небольшое, но важное исправление.

Однако теперь мы должны рассмотреть, что произойдет, когда heroku local вызывает (т.е. запускает) php-fpm.Традиционно я делаю brew services start php@7.2, который всегда включен (демон).Однако с открытым Activity Monitor я вижу, что локальная герока порождает новый родительский процесс и рабочих.Возможно, так и должно быть.Он просто игнорирует экземпляр, который запускается brew services, и создает свой собственный.

Хотя загадка возникает, когда я выхожу из Heroku local, нажимая Ctrl-C.Это правильный способ выхода?Если я нажимаю Ctrl-C, я получаю командную строку обратно, но, глядя на порожденные процессы php-fpm в Activity Monitor, экземпляры php-fpm не завершаются.Затем, если я выпускаю локальную героку во второй раз после первой остановки, я получаю это:

5:44:37 PM web.1    |  [20-Sep-2019 17:44:37] ERROR: An another FPM instance seems to already listen on /tmp/heroku.fcgi.5000.sock
5:44:37 PM web.1    |  [20-Sep-2019 17:44:37] ERROR: FPM initialization failed

... что вполне понятно.Это можно исправить, вручную остановив процесс в Activity Monitor.Однако мне интересно, что здесь происходит;Как правильно завершить локальную героку?

Если быть точным, Ctrl-C завершает один процесс php, у которого есть родительский процесс узла, но не завершает пять процессов php-fpm, один из этих пятиродитель остальных четырех, и тот, у которого есть родительский процесс bash.

Итак, сегодня мы прошли большой путь;остающиеся проблемы, кажется,;еще улучшить:

  1. Как правильно завершить процесс php-fpm (Ctrl-C этого не делает).Также, если у меня открыто два терминала, один из которых ранее запускал локальную героку, и я запускаю его снова в другом окне, окно, которое отображало обычную командную строку в ожидании инструкции, внезапно возвращается к жизни, получает новую информацию, которая являетсяно удивительно, мне интересно, как это работает и считается ли это нормальным.

  2. Узнайте, почему apache не обслуживает никакую страницу, кроме root, как отмечалось выше.

Работает!

Теперь мы едем!Единственное важное изменение, которое я пропустил в /usr/local/etc/httpd/httpd.conf, было прокомментировать в строке:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

Я использую laravel, который обслуживает все страницы через index.php.Это означает, что вы хотите переписать каждый запрос страницы, который не является index.php, обратно в индекс php.Таким образом, по умолчанию .htaccess в laravel имеет строку RewriteRule ^ index.php [L], которая делает именно это ...

Теперь единственная проблема, о которой я сейчас знаю, это то, что Ctrl-C не завершает дочерние процессы .... но сначала я собираюсь настроить все свои локальные приложения на использование fpm 7.3, как я виделСсылка в buildpack специально на 7.3, так что интересно, может ли это помочь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...