mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-30 16:36:56 +03:00
fix(web): improve skills after haiku agent testing
- web-unpublish: add -All flag to remove all publications at once - web-stop: add hint about /web-unpublish after stopping - web-publish SKILL.md: emphasize mandatory -V8Path/-UserName params - Fix Port default comment (8080 → 8081) - Clean up descriptions: semantic matching only, no technical details - web-guide: add "delete all" scenario Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
96b400ddb9
commit
b535dff609
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: web-info
|
name: web-info
|
||||||
description: Статус веб-публикации 1С — Apache, опубликованные базы, ошибки. Используй когда пользователь спрашивает про статус веб-сервера, опубликованные базы, работает ли Apache
|
description: Статус Apache и веб-публикаций 1С — запущен ли сервер, какие базы опубликованы, ошибки. Используй когда пользователь спрашивает про статус веб-сервера, опубликованные базы, работает ли Apache
|
||||||
argument-hint: ""
|
argument-hint: ""
|
||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
|
|||||||
@@ -24,14 +24,19 @@ allowed-tools:
|
|||||||
|
|
||||||
## Параметры подключения
|
## Параметры подключения
|
||||||
|
|
||||||
Прочитай `.v8-project.json` из корня проекта. Возьми `v8path` (путь к платформе) и разреши базу:
|
Прочитай `.v8-project.json` из корня проекта и разреши базу:
|
||||||
1. Если пользователь указал параметры подключения (путь, сервер) — используй напрямую
|
1. Если пользователь указал параметры подключения (путь, сервер) — используй напрямую
|
||||||
2. Если указал базу по имени — ищи по id / alias / name в `.v8-project.json`
|
2. Если указал базу по имени — ищи по id / alias / name в `.v8-project.json`
|
||||||
3. Если не указал — сопоставь текущую ветку Git с `databases[].branches`
|
3. Если не указал — сопоставь текущую ветку Git с `databases[].branches`
|
||||||
4. Если ветка не совпала — используй `default`
|
4. Если ветка не совпала — используй `default`
|
||||||
Если `v8path` не задан — автоопределение.
|
|
||||||
Если в `.v8-project.json` задан `webPath` — используй как `-ApachePath`.
|
**ОБЯЗАТЕЛЬНО передавай все найденные параметры:**
|
||||||
Если файла нет — предложи `/db-list add`.
|
- **`-V8Path`** — из `v8path` в `.v8-project.json`. Если не передать, скрипт автоопределит версию платформы, что может выбрать не ту версию
|
||||||
|
- **`-UserName`** — из поля `user` найденной записи базы (если есть)
|
||||||
|
- **`-Password`** — из поля `password` найденной записи базы (если есть)
|
||||||
|
- **`-ApachePath`** — из `webPath` в `.v8-project.json` (если есть)
|
||||||
|
|
||||||
|
Если файла `.v8-project.json` нет — предложи `/db-list add`.
|
||||||
|
|
||||||
## Команда
|
## Команда
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
Корень Apache (по умолчанию tools\apache24)
|
Корень Apache (по умолчанию tools\apache24)
|
||||||
|
|
||||||
.PARAMETER Port
|
.PARAMETER Port
|
||||||
Порт (по умолчанию 8080)
|
Порт (по умолчанию 8081)
|
||||||
|
|
||||||
.PARAMETER Manual
|
.PARAMETER Manual
|
||||||
Не скачивать Apache — только проверить и дать инструкцию
|
Не скачивать Apache — только проверить и дать инструкцию
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ while ($elapsed -lt $maxWait) {
|
|||||||
$check = Get-OurHttpd
|
$check = Get-OurHttpd
|
||||||
if (-not $check) {
|
if (-not $check) {
|
||||||
Write-Host "Apache остановлен" -ForegroundColor Green
|
Write-Host "Apache остановлен" -ForegroundColor Green
|
||||||
|
Write-Host "Публикации сохранены. Для удаления: /web-unpublish <имя> или /web-unpublish --all" -ForegroundColor Gray
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,3 +89,4 @@ if ($remaining) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Apache остановлен" -ForegroundColor Green
|
Write-Host "Apache остановлен" -ForegroundColor Green
|
||||||
|
Write-Host "Публикации сохранены. Для удаления: /web-unpublish <имя> или /web-unpublish --all" -ForegroundColor Gray
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: web-unpublish
|
name: web-unpublish
|
||||||
description: Удаление веб-публикации 1С. Используй когда пользователь просит убрать публикацию, удалить веб-доступ к базе
|
description: Удаление веб-публикации 1С из Apache. Используй когда пользователь просит убрать публикацию, удалить веб-доступ к базе
|
||||||
argument-hint: "<appname>"
|
argument-hint: "<appname | --all>"
|
||||||
allowed-tools:
|
allowed-tools:
|
||||||
- Bash
|
- Bash
|
||||||
- Read
|
- Read
|
||||||
@@ -9,15 +9,18 @@ allowed-tools:
|
|||||||
- AskUserQuestion
|
- AskUserQuestion
|
||||||
---
|
---
|
||||||
|
|
||||||
# /web-unpublish — Удаление публикации 1С
|
# /web-unpublish — Удаление веб-публикации 1С из Apache
|
||||||
|
|
||||||
Удаляет публикацию из httpd.conf и каталог `publish/{appname}`. Если других публикаций не осталось — удаляет глобальный блок 1C и останавливает Apache.
|
Удаляет блок публикации из `httpd.conf` и каталог `publish/{appname}` внутри Apache. Если других публикаций не осталось — удаляет глобальный блок 1C и останавливает Apache. С флагом `--all` удаляет все публикации разом.
|
||||||
|
|
||||||
|
> **Внимание:** этот навык управляет только веб-публикациями в Apache (блоки в `httpd.conf` + каталог `publish/`). Он **НЕ** удаляет каталоги проекта, `upload/`, базы данных или исходники.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```
|
```
|
||||||
/web-unpublish <appname>
|
/web-unpublish <appname>
|
||||||
/web-unpublish bpdemo
|
/web-unpublish bpdemo
|
||||||
|
/web-unpublish --all
|
||||||
```
|
```
|
||||||
|
|
||||||
## Параметры подключения
|
## Параметры подключения
|
||||||
@@ -25,7 +28,9 @@ allowed-tools:
|
|||||||
Прочитай `.v8-project.json` из корня проекта. Если задан `webPath` — используй как `-ApachePath`.
|
Прочитай `.v8-project.json` из корня проекта. Если задан `webPath` — используй как `-ApachePath`.
|
||||||
По умолчанию `tools/apache24` от корня проекта.
|
По умолчанию `tools/apache24` от корня проекта.
|
||||||
|
|
||||||
Если пользователь не указал `appname`, выполни `/web-info` чтобы показать список публикаций и спроси какую удалить.
|
Если пользователь не указал `appname` и не указал `--all`, выполни `/web-info` чтобы показать список публикаций и спроси какую удалить.
|
||||||
|
|
||||||
|
Если пользователь просит удалить **все** публикации — используй `-All`.
|
||||||
|
|
||||||
## Команда
|
## Команда
|
||||||
|
|
||||||
@@ -37,15 +42,21 @@ powershell.exe -NoProfile -File .claude/skills/web-unpublish/scripts/web-unpubli
|
|||||||
|
|
||||||
| Параметр | Обязательный | Описание |
|
| Параметр | Обязательный | Описание |
|
||||||
|----------|:------------:|----------|
|
|----------|:------------:|----------|
|
||||||
| `-AppName <имя>` | да | Имя публикации |
|
| `-AppName <имя>` | * | Имя публикации |
|
||||||
|
| `-All` | * | Удалить все публикации |
|
||||||
| `-ApachePath <путь>` | нет | Корень Apache (по умолчанию `tools/apache24`) |
|
| `-ApachePath <путь>` | нет | Корень Apache (по умолчанию `tools/apache24`) |
|
||||||
|
|
||||||
|
> `*` — нужен либо `-AppName`, либо `-All`
|
||||||
|
|
||||||
## Примеры
|
## Примеры
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# Удалить публикацию
|
# Удалить одну публикацию
|
||||||
powershell.exe -NoProfile -File .claude/skills/web-unpublish/scripts/web-unpublish.ps1 -AppName "bpdemo"
|
powershell.exe -NoProfile -File .claude/skills/web-unpublish/scripts/web-unpublish.ps1 -AppName "bpdemo"
|
||||||
|
|
||||||
|
# Удалить все публикации
|
||||||
|
powershell.exe -NoProfile -File .claude/skills/web-unpublish/scripts/web-unpublish.ps1 -All
|
||||||
|
|
||||||
# С указанием пути
|
# С указанием пути
|
||||||
powershell.exe -NoProfile -File .claude/skills/web-unpublish/scripts/web-unpublish.ps1 -AppName "mydb" -ApachePath "C:\tools\apache24"
|
powershell.exe -NoProfile -File .claude/skills/web-unpublish/scripts/web-unpublish.ps1 -AppName "mydb" -ApachePath "C:\tools\apache24"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -2,32 +2,42 @@
|
|||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
<#
|
<#
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Удаление публикации 1С из Apache
|
Удаление веб-публикации 1С из Apache
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
Удаляет маркерный блок из httpd.conf и каталог публикации.
|
Удаляет маркерный блок из httpd.conf и каталог публикации.
|
||||||
Если Apache запущен — перезапускает для применения.
|
Если Apache запущен — перезапускает для применения.
|
||||||
|
С флагом -All удаляет все публикации и останавливает Apache.
|
||||||
|
|
||||||
.PARAMETER AppName
|
.PARAMETER AppName
|
||||||
Имя публикации (обязательный)
|
Имя публикации (обязательный, если не указан -All)
|
||||||
|
|
||||||
.PARAMETER ApachePath
|
.PARAMETER ApachePath
|
||||||
Корень Apache (по умолчанию tools\apache24)
|
Корень Apache (по умолчанию tools\apache24)
|
||||||
|
|
||||||
|
.PARAMETER All
|
||||||
|
Удалить все публикации
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
.\web-unpublish.ps1 -AppName "mydb"
|
.\web-unpublish.ps1 -AppName "mydb"
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\web-unpublish.ps1 -All
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
.\web-unpublish.ps1 -AppName "bpdemo" -ApachePath "C:\tools\apache24"
|
.\web-unpublish.ps1 -AppName "bpdemo" -ApachePath "C:\tools\apache24"
|
||||||
#>
|
#>
|
||||||
|
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory=$true)]
|
[Parameter(Mandatory=$false)]
|
||||||
[string]$AppName,
|
[string]$AppName,
|
||||||
|
|
||||||
[Parameter(Mandatory=$false)]
|
[Parameter(Mandatory=$false)]
|
||||||
[string]$ApachePath
|
[string]$ApachePath,
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[switch]$All
|
||||||
)
|
)
|
||||||
|
|
||||||
$OutputEncoding = [System.Text.Encoding]::UTF8
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
||||||
@@ -39,7 +49,13 @@ if (-not $ApachePath) {
|
|||||||
$ApachePath = Join-Path $projectRoot "tools\apache24"
|
$ApachePath = Join-Path $projectRoot "tools\apache24"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Remove marker block from httpd.conf ---
|
# --- Validate params ---
|
||||||
|
if (-not $All -and -not $AppName) {
|
||||||
|
Write-Host "Error: укажите -AppName или -All" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Read httpd.conf ---
|
||||||
$confFile = Join-Path (Join-Path $ApachePath "conf") "httpd.conf"
|
$confFile = Join-Path (Join-Path $ApachePath "conf") "httpd.conf"
|
||||||
if (-not (Test-Path $confFile)) {
|
if (-not (Test-Path $confFile)) {
|
||||||
Write-Host "Error: httpd.conf не найден: $confFile" -ForegroundColor Red
|
Write-Host "Error: httpd.conf не найден: $confFile" -ForegroundColor Red
|
||||||
@@ -47,16 +63,43 @@ if (-not (Test-Path $confFile)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$confContent = [System.IO.File]::ReadAllText($confFile)
|
$confContent = [System.IO.File]::ReadAllText($confFile)
|
||||||
$pubMarkerStart = "# --- 1C Publication: $AppName ---"
|
|
||||||
$pubMarkerEnd = "# --- End: $AppName ---"
|
|
||||||
|
|
||||||
if ($confContent -match [regex]::Escape($pubMarkerStart)) {
|
# --- Helper: our httpd process ---
|
||||||
$pattern = '\r?\n?' + [regex]::Escape($pubMarkerStart) + '[\s\S]*?' + [regex]::Escape($pubMarkerEnd) + '\r?\n?'
|
$httpdExe = Join-Path (Join-Path $ApachePath "bin") "httpd.exe"
|
||||||
$confContent = [regex]::Replace($confContent, $pattern, "`n")
|
$httpdExeNorm = (Resolve-Path $httpdExe -ErrorAction SilentlyContinue).Path
|
||||||
[System.IO.File]::WriteAllText($confFile, $confContent)
|
function Get-OurHttpd {
|
||||||
Write-Host "httpd.conf: блок публикации '$AppName' удалён" -ForegroundColor Green
|
Get-Process httpd -ErrorAction SilentlyContinue | Where-Object {
|
||||||
|
try { $_.Path -eq $httpdExeNorm } catch { $false }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Collect app names to remove ---
|
||||||
|
if ($All) {
|
||||||
|
$pubPattern = '# --- 1C Publication: (.+?) ---'
|
||||||
|
$pubMatches = [regex]::Matches($confContent, $pubPattern)
|
||||||
|
if ($pubMatches.Count -eq 0) {
|
||||||
|
Write-Host "Нет публикаций для удаления" -ForegroundColor Yellow
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
$appNames = @()
|
||||||
|
foreach ($m in $pubMatches) { $appNames += $m.Groups[1].Value }
|
||||||
|
Write-Host "Удаление всех публикаций: $($appNames -join ', ')" -ForegroundColor Cyan
|
||||||
} else {
|
} else {
|
||||||
Write-Host "Публикация '$AppName' не найдена в httpd.conf" -ForegroundColor Yellow
|
$appNames = @($AppName)
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Remove marker blocks ---
|
||||||
|
foreach ($name in $appNames) {
|
||||||
|
$pubMarkerStart = "# --- 1C Publication: $name ---"
|
||||||
|
$pubMarkerEnd = "# --- End: $name ---"
|
||||||
|
|
||||||
|
if ($confContent -match [regex]::Escape($pubMarkerStart)) {
|
||||||
|
$pattern = '\r?\n?' + [regex]::Escape($pubMarkerStart) + '[\s\S]*?' + [regex]::Escape($pubMarkerEnd) + '\r?\n?'
|
||||||
|
$confContent = [regex]::Replace($confContent, $pattern, "`n")
|
||||||
|
Write-Host "httpd.conf: блок публикации '$name' удалён" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "Публикация '$name' не найдена в httpd.conf" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Check if any publications remain; if not, remove global block ---
|
# --- Check if any publications remain; if not, remove global block ---
|
||||||
@@ -67,38 +110,33 @@ if ($remainingPubs.Count -eq 0) {
|
|||||||
if ($confContent -match [regex]::Escape($globalMarkerStart)) {
|
if ($confContent -match [regex]::Escape($globalMarkerStart)) {
|
||||||
$globalPattern = '\r?\n?' + [regex]::Escape($globalMarkerStart) + '[\s\S]*?' + [regex]::Escape($globalMarkerEnd) + '\r?\n?'
|
$globalPattern = '\r?\n?' + [regex]::Escape($globalMarkerStart) + '[\s\S]*?' + [regex]::Escape($globalMarkerEnd) + '\r?\n?'
|
||||||
$confContent = [regex]::Replace($confContent, $globalPattern, "`n")
|
$confContent = [regex]::Replace($confContent, $globalPattern, "`n")
|
||||||
[System.IO.File]::WriteAllText($confFile, $confContent)
|
|
||||||
Write-Host "httpd.conf: глобальный блок 1C удалён (нет публикаций)" -ForegroundColor Green
|
Write-Host "httpd.conf: глобальный блок 1C удалён (нет публикаций)" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Remove publish directory ---
|
[System.IO.File]::WriteAllText($confFile, $confContent)
|
||||||
$publishDir = Join-Path (Join-Path $ApachePath "publish") $AppName
|
|
||||||
if (Test-Path $publishDir) {
|
# --- Remove publish directories ---
|
||||||
Remove-Item $publishDir -Recurse -Force
|
foreach ($name in $appNames) {
|
||||||
Write-Host "Каталог удалён: $publishDir" -ForegroundColor Green
|
$publishDir = Join-Path (Join-Path $ApachePath "publish") $name
|
||||||
} else {
|
if (Test-Path $publishDir) {
|
||||||
Write-Host "Каталог не найден: $publishDir" -ForegroundColor Yellow
|
Remove-Item $publishDir -Recurse -Force
|
||||||
|
Write-Host "Каталог удалён: $publishDir" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "Каталог не найден: $publishDir" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Restart Apache if running (only our instance) ---
|
# --- Restart/Stop Apache if running (only our instance) ---
|
||||||
$httpdExe = Join-Path (Join-Path $ApachePath "bin") "httpd.exe"
|
$httpdProc = Get-OurHttpd
|
||||||
$httpdExeNorm = (Resolve-Path $httpdExe -ErrorAction SilentlyContinue).Path
|
|
||||||
$httpdProc = Get-Process httpd -ErrorAction SilentlyContinue | Where-Object {
|
|
||||||
try { $_.Path -eq $httpdExeNorm } catch { $false }
|
|
||||||
}
|
|
||||||
if ($httpdProc) {
|
if ($httpdProc) {
|
||||||
Write-Host "Перезапуск Apache..."
|
|
||||||
$httpdProc | Stop-Process -Force -ErrorAction SilentlyContinue
|
|
||||||
Start-Sleep -Seconds 1
|
|
||||||
|
|
||||||
# Only restart if there are remaining publications
|
|
||||||
if ($remainingPubs.Count -gt 0) {
|
if ($remainingPubs.Count -gt 0) {
|
||||||
|
Write-Host "Перезапуск Apache..."
|
||||||
|
$httpdProc | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
Start-Process -FilePath $httpdExe -WorkingDirectory $ApachePath -WindowStyle Hidden
|
Start-Process -FilePath $httpdExe -WorkingDirectory $ApachePath -WindowStyle Hidden
|
||||||
Start-Sleep -Seconds 2
|
Start-Sleep -Seconds 2
|
||||||
$check = Get-Process httpd -ErrorAction SilentlyContinue | Where-Object {
|
$check = Get-OurHttpd
|
||||||
try { $_.Path -eq $httpdExeNorm } catch { $false }
|
|
||||||
}
|
|
||||||
if ($check) {
|
if ($check) {
|
||||||
Write-Host "Apache перезапущен" -ForegroundColor Green
|
Write-Host "Apache перезапущен" -ForegroundColor Green
|
||||||
} else {
|
} else {
|
||||||
@@ -106,9 +144,16 @@ if ($httpdProc) {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Write-Host "Публикаций не осталось — Apache остановлен" -ForegroundColor Green
|
Write-Host "Публикаций не осталось — останавливаю Apache..."
|
||||||
|
$httpdProc | Stop-Process -Force -ErrorAction SilentlyContinue
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
Write-Host "Apache остановлен" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "Публикация '$AppName' удалена" -ForegroundColor Green
|
if ($All) {
|
||||||
|
Write-Host "Все публикации удалены ($($appNames.Count) шт.)" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "Публикация '$AppName' удалена" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
|||||||
+9
-1
@@ -9,7 +9,7 @@
|
|||||||
| `/web-publish` | `.ps1` | Публикация базы (VRD + httpd.conf + запуск Apache) |
|
| `/web-publish` | `.ps1` | Публикация базы (VRD + httpd.conf + запуск Apache) |
|
||||||
| `/web-info` | `.ps1` | Статус Apache и список публикаций |
|
| `/web-info` | `.ps1` | Статус Apache и список публикаций |
|
||||||
| `/web-stop` | `.ps1` | Остановка Apache |
|
| `/web-stop` | `.ps1` | Остановка Apache |
|
||||||
| `/web-unpublish` | `.ps1` | Удаление публикации |
|
| `/web-unpublish` | `.ps1` | Удаление публикации (одной или всех `--all`) |
|
||||||
|
|
||||||
## Рабочий цикл
|
## Рабочий цикл
|
||||||
|
|
||||||
@@ -98,6 +98,14 @@ Claude вызовет `/web-stop`.
|
|||||||
|
|
||||||
Claude вызовет `/web-unpublish bpdemo` → удалит блок из httpd.conf → удалит каталог → перезапустит Apache (если есть другие публикации).
|
Claude вызовет `/web-unpublish bpdemo` → удалит блок из httpd.conf → удалит каталог → перезапустит Apache (если есть другие публикации).
|
||||||
|
|
||||||
|
### Удалить все публикации
|
||||||
|
|
||||||
|
```
|
||||||
|
> Удали все веб-публикации
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude вызовет `/web-unpublish --all` → удалит все блоки из httpd.conf → удалит все каталоги → остановит Apache.
|
||||||
|
|
||||||
## Ручная установка Apache
|
## Ручная установка Apache
|
||||||
|
|
||||||
Если автоматическая загрузка невозможна (прокси, firewall), используйте флаг `--manual`:
|
Если автоматическая загрузка невозможна (прокси, firewall), используйте флаг `--manual`:
|
||||||
|
|||||||
Reference in New Issue
Block a user