KarelWintersky

KarelWintersky / satisfactory-cli.md

Last active 2 days ago

Like 0

KarelWintersky revised this gist 2 days ago · 475d4a2

1 file changed, 1 insertion, 1 deletion

satisfactory-cli.md
@@ -1,4 +1,4 @@
1 - Сейчас satisfactory-cli.php сломается, если нет папки vendor (чего не бывает, когда сервис собран в PHAR и запущен на сервере). У меня два решения - мы либо собираем отдельный satisfactory-cli.phar, либо добавляем кли-команды к основному server.php / satisfactory.phar - но тогда надо менять механизм вызовов. Например, вызывать сервер с ключом --serve (то есть satisfactory.phar --serve --config=/path/to/config --verbose), а cli-команды - без --serve . Что думаешь?
1 + > Сейчас satisfactory-cli.php сломается, если нет папки vendor (чего не бывает, когда сервис собран в PHAR и запущен на сервере). У меня два решения - мы либо собираем отдельный satisfactory-cli.phar, либо добавляем кли-команды к основному server.php / satisfactory.phar - но тогда надо менять механизм вызовов. Например, вызывать сервер с ключом --serve (то есть satisfactory.phar --serve --config=/path/to/config --verbose), а cli-команды - без --serve . Что думаешь?
2 2
3 3 Ключевой факт: внутри `satisfactory.phar` уже есть **всё**, что нужно CLI — `app/*.php` (AppConfig/Database/Setup) и `vendor/` (включая `arris.toolkit.cli-console` — он в `require`). В phar не попадает только сам файл `satisfactory-cli.php` (~180 строк задач). Поэтому:
4 4

KarelWintersky revised this gist 2 days ago · 5e44e0d

1 file changed, 20 insertions

satisfactory-cli.md (file created)
@@ -0,0 +1,20 @@
1 + Сейчас satisfactory-cli.php сломается, если нет папки vendor (чего не бывает, когда сервис собран в PHAR и запущен на сервере). У меня два решения - мы либо собираем отдельный satisfactory-cli.phar, либо добавляем кли-команды к основному server.php / satisfactory.phar - но тогда надо менять механизм вызовов. Например, вызывать сервер с ключом --serve (то есть satisfactory.phar --serve --config=/path/to/config --verbose), а cli-команды - без --serve . Что думаешь?
2 +
3 + Ключевой факт: внутри `satisfactory.phar` уже есть **всё**, что нужно CLI — `app/*.php` (AppConfig/Database/Setup) и `vendor/` (включая `arris.toolkit.cli-console` — он в `require`). В phar не попадает только сам файл `satisfactory-cli.php` (~180 строк задач). Поэтому:
4 +
5 + **Моё мнение: вариант 2 (CLI в основном phar).** Отдельный `satisfactory-cli.phar` дублирует весь код (server + app + vendor ≈ тот же размер) ради 180 строк — два артефакта, две сборки в `build.sh`, два файла в DEB и makefile install. Никакого выигрыша по размеру или изоляции.
6 +
7 + **Но с одной поправкой к твоей схеме.** Если сделать `--serve` обязательным, то после обновления phar без синхронного обновления юнита сервис молча падает: текущий `ExecStart` в `debian/satisfactory.service` — `--config=... --verbose` **без** `--serve` → попадёт в CLI-режим «нет задач» → exit(1). Это футган на деплое (на боевой машине юнит обновляется отдельно от phar).
8 +
9 + Предлагаю обратную диспетчеризацию — сервер остаётся дефолтом, CLI маркируется своими флагами:
10 +
11 + - `satisfactory.phar --serve --config=... --verbose` → сервер (явно)
12 + - `satisfactory.phar --config=... --verbose` → сервер (старый юнит продолжает работать без правок)
13 + - `satisfactory.phar --delete=vendor/pkg` / `--clear` / `--help` → CLI (и `--config` общий для обоих режимов)
14 +
15 + Реализация тривиальная: перенести `deletePackage`/`clearCache`/`removeTree` в `app/CLI.php` (finder box.json подхватит автоматически), а в `server.php` сделать роутинг по флагам перед стартом сервера. `App::init()` и так уже грузит+валидирует конфиг — CLI переиспользует его.
16 +
17 + Если ок — реализую. Если принципиально «`--serve` обязателен», тогда аккуратно поправим `debian/satisfactory.service` и README в той же итерации, но живой юнит на сервере всё равно придётся обновить руками.
18 +
19 + ---
20 +