Przejdź do treści

Hosty z ograniczonymi procesami

Hosting współdzielony, zabezpieczone kontenery i niektóre platformy PaaS wyłączają funkcje procesów za pomocą disable_functions. Operacje wyszukiwania, przepisywania i indeksowania w Greph działają wewnątrz procesu PHP (skanowanie równoległe tworzy kopie robocze przez fork, jeśli to możliwe), więc nadal działają w takim środowisku.

Co uruchamia procesy

Kod Funkcja Zastosowanie
Greph\Support\ToolResolver shell_exec() Lokalizowanie zewnętrznych plików binarnych grep, rg, sg (lub npm) i gh w PATH
Greph\Support\CommandRunner proc_open() Uruchamianie tych plików binarnych oraz plików wykonywalnych Greph jako podprocesów
Greph\Parallel\WorkerPool pcntl_fork() Równoległe procesy robocze dla -j N / jobs: N

ToolResolver i CommandRunner służą wyłącznie narzędziom porównawczym: generatorowi macierzy funkcji, modułowi testów wydajności i modułowi testów oracle. Greph::search*(), Greph::rewriteAst(), kreatory indeksów i cztery pliki wykonywalne nigdy ich nie wywołują.

Pula procesów roboczych sprawdza function_exists('pcntl_fork') przed wykonaniem fork. Funkcja wymieniona w disable_functions nie istnieje z punktu widzenia PHP, więc na takim hoście każdy fragment działa w bieżącym procesie, z takim samym wynikiem jak -j 1. Zobacz Procesy równoległe.

Gdy proc_open, shell_exec, exec, system, passthru, popen i pcntl_fork są wyłączone, wyszukiwanie tekstu za pomocą jobs: 4, przepisywanie AST, greph-index build, greph-index ast-cache build i search oraz opakowania rg i sg działają normalnie.

Pomocnicze narzędzia działające bez procesów

Osadzając pomocnicze narzędzia porównawcze w takim środowisku, twórz je z jawną polityką wyłączenia procesów:

PHP
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();

Te instancje domyślnie odmawiają działania: każde wyszukiwanie lub polecenie zgłasza RuntimeException zamiast próbować uruchomić proces.

Text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version

Przekazuj je wszędzie tam, gdzie akceptowany jest ToolResolver lub CommandRunner, na przykład jako argumenty toolResolver: i commandRunner: w Greph\FeatureMatrix\FeatureMatrixGenerator. Generator kończy działanie bez uruchamiania procesu, ale nie może utworzyć użytecznego raportu: wyniki testów narzędzi nadrzędnych są oznaczane jako Unavailable, a testy uruchamiające własne pliki wykonywalne Greph jako Fail, ponieważ każdy test jest poleceniem. Wygeneruj macierz funkcji na komputerze, na którym można uruchamiać procesy.