Server=localhost
Reference containers by name, not IP, whenever possible. Otherwise you’ll need to constantly update the IP address you use.
Port=6002
"Postgres": "Server=localhost; Port=6002; Database=post; User ID=postgres; Password=passwd; Pooling=true"
"Postgres": "Server=postgres_db; Port=5432; Database=post; User ID=postgres; Password=passwd; Pooling=true"
version: '3.8'
networks:
postgres-network:
driver: bridge
services:
gchain.posts.api:
image: gchain.posts.api
build:
context: .
dockerfile: GChain.Posts.Api/Dockerfile
ports:
- "80:8080"
networks:
- postgres-network
depends_on:
- postgres_db
postgres_db:
container_name: postgres_post
image: postgres:latest
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-passwd}
POSTGRES_DB: post
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "6002:5432"
networks:
- postgres-network
restart: unless-stopped
volumes:
postgres-data:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main(string[] args)
{
string text = "This is the great city of Sevsar, the harbor of humanity";
string[] keywords = { "great", "harbor" };
HighlightKeywords(text, keywords, ConsoleColor.Red);
Console.WriteLine();
}
public static void HighlightKeywords(string text, string[] keywords, ConsoleColor highlightColor)
{
string pattern = $@"\b({string.Join("|", keywords)})\b";
MatchCollection matches = Regex.Matches(text, pattern, RegexOptions.IgnoreCase);
int lastIndex = 0;
foreach (Match match in matches)
{
Console.Write(text.Substring(lastIndex, match.Index - lastIndex));
Console.ForegroundColor = highlightColor;
Console.Write(match.Value);
Console.ResetColor();
lastIndex = match.Index + match.Length;
}
Console.Write(text.Substring(lastIndex));
}
}
Как правильно собрать проект таким образом чтобы у других пользователей не было доступа на исходный код.
не говорю чтобы проект должен состоит из одного exe файла так как думаю это повлияет на оптимизацию самой приложении.
using System.IO.Compression;
string zipPath = @"path/zip.zip";
string unZipPath = @"path/unzip-dir";
string dirNameInZip = "dir-name";
// Проверяем наличие архива
if (!File.Exists(zipPath))
{
throw new FileNotFoundException("Ошибка, архив не найден.", zipPath);
}
// Создаем выходную директорию, если она не существует
Directory.CreateDirectory(unZipPath);
// Получаем архив
using var archive = ZipFile.OpenRead(zipPath);
// Ищем нужную директорию в архиве
var folder = archive.Entries.FirstOrDefault((e) =>
e.FullName.StartsWith(dirNameInZip + "/") && e.FullName.Length > dirNameInZip.Length + 1);
if (folder == null)
{
throw new DirectoryNotFoundException($"Ошибка, директория '{dirNameInZip}' в архиве не найдена.");
}
// Извлекаем директорию со всеми данными
foreach (var entry in archive.Entries.Where((e) => e.FullName.StartsWith(folder.FullName)))
{
string relativePath = entry.FullName[(folder.FullName.Length + 1)..];
string filePath = Path.Combine(unZipPath, relativePath);
// Создание вложенных директорий, если требуется
string? directoryPath = Path.GetDirectoryName(filePath);
if (!string.IsNullOrEmpty(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
// Извлечение файлов с перезаписью
entry.ExtractToFile(filePath, overwrite: true);
}
# Build Core lib
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS core-build
WORKDIR /src
COPY ["../Core/Core.csproj", "./Core/"]
RUN dotnet restore "./Core/Core.csproj"
COPY ["../Core/", "./Core/"]
RUN dotnet build "./Core/Core.csproj" -c Release -o /app/core
# Build API proj
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS api-build
WORKDIR /src
COPY ["Service/API/API.csproj", "./Service/API/"]
RUN dotnet restore "./Service/API/API.csproj"
COPY ["Service/API/", "./Service/API/"]
COPY --from=core-build /app/core /lib
RUN dotnet build "./Service/API/API.csproj" -c Release -o /app/service
# Create final image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=api-build /app/service .
ENTRYPOINT ["dotnet", "API.dll"]
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
try:
driver.get('https://dzen.ru/')
iframe = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "iframe.dzen-search-arrow-common__frame"))
)
driver.switch_to.frame(iframe)
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input.arrow__input.mini-suggest__input"))
)
print(element) # <selenium.webdriver.remote.webelement.WebElement (session="5e3642980c7d8fcb1b687f3c9a716998", element="f.15CF8DCC914EA871801192FF570A26AF.d.A418C847E39359367688E91E0850A734.e.5")>
element.send_keys("Найдено!")
time.sleep(20)
finally:
driver.quit()
публиковать страницы, создавать иерархию страниц, чпу url, какой то слайдер с картинками
небольшое количество услуги в регионе
Нашли компанию, предлагает разработку сайта на WP или на Python+Django (дороже и дольше)
Если не сложно, добавьте пример самого графика. Как добавить туда значения - я как-нибудь доковыляю сам.