💎 Дневник разработчика CRYSTAL #2: Прототип — Enter Text (LARS)
8 января
обн: 13 января
Содержание:
1. Структура проекта и характеристики локального ПК
Строение:
Структура:
- Leptos v0.8.2.
- Actix Web v4.x.
- Rust v1.92.0.
- ScyllaDB v2025.4.0.
Характеристики локального ПК:
- OS: Debian 12.
2. Введение
Enter Text (LARS) — это прототип, который был разработан для подготовки перехода CRYSTAL на новый технологический стек — LARS (Leptos, Actix Web, Rust, ScyllaDB).
Данный прототип позволяет добавлять, выводить, обновлять и удалять текст, то есть демонстрирует полный цикл CRUD операций с базой данных ScyllaDB.
Вы можете развернуть и протестировать данный прототип в среде на базе Linux, воспользовавшись инструкциями ниже.
3. Ключевые особенности
-
3.1. Auto-Schema, Single-Row Architecture, and Constant-id
При запуске приложения автоматически создается таблицаdata(если она еще не существует) для хранения введенного текста. В процессе сохранения в таблице формируется строка, состоящая из трех колонок:id(первичный ключ),content(текстовые данные) иcreated_at(метка времени). Для вводимого текста используется постоянныйidв форматеUUID (11111111-1111-1111-1111-111111111111). Вместо создания множества записей система использует операциюINSERTкак«upsert»(обновление существующей записи). Так какidвсегда один и тот же, любая операция сохранения просто перезаписывает данные в колонкеcontentдля этой конкретной строки:Скрин 1: Single Row View
-
3.2. Blocking SSR (SsrMode::PartiallyBlocked)
Блокирующий режим рендеринга на стороне сервера. Это гарантирует, что динамический контент из ScyllaDB (и весь остальной текст на сайте) "вшивается" в структуру HTML прямо на сервере. В результате, поисковые роботы получают полностью готовый документ, что обеспечивает 100% индексацию и высокие позиции в SEO:Скрин 2: Server-Side Rendered (SSR). Просмотр исходного кода в браузере (Ctrl+U)
-
3.3. Fine-grained Reactivity
При обновлении текста, перерисовывается только конкретный узел DOM, содержащий этот текст, остальная часть страницы остается нетронутой. Такое поведение достигается благодаря реактивным сигналам Leptos. -
3.4. Isomorphic Data Access & Reactive UI
ИспользованиеResource::new_blockingобеспечивает бесшовную синхронизацию состояния между сервером и клиентом. Оно автоматически отслеживает изменения в базе данных через версии действий, позволяя интерфейсу, мгновенно переключать кнопки (например, переключаться между «Добавить» и «Обновить» или показывать кнопку «Удалить») без перезагрузки страницы. -
3.5. Asynchronous ScyllaDB Integration
Высокопроизводительное асинхронное соединение черезscylla-rust-driver. Благодаря использованию общегоArc<Session>, сервер эффективно распределяет ресурсы и может обрабатывать тысячи одновременных запросов без блокировки потоков процессора. Пока база данных готовит ответ, CPU остается свободным для других задач, что гарантирует максимальную отзывчивость системы при экстремальных нагрузках. -
3.6. SSR Isolation
Весь код взаимодействия с базой данных защищен макросами #[cfg(feature = "ssr")]. Это гарантирует, что драйверы базы данных и конфиденциальная логика никогда не покинут сервер. -
3.7. Информативное логирование на сервере
Система выводит в консоль информативные отчеты об операциях:Скрин 3: Журнал готовности ScyllaDB
4. Установка и настройка
Примечание о совместимости: Этот проект проверен и стабильно работает на Debian 12. Разработка на Windows не рекомендуется, так как процесс установки Leptos и ScyllaDB в этой системе, может вызвать критические ошибки. Для корректной работы требуется среда на базе Linux.
-
4.1. Подготовка окружения (Debian 12 и аналогичные)
Установка системных зависимостей:
sudo apt update && sudo apt install build-essential pkg-config libssl-dev -y -
4.2. Установка Rust и инструментов Leptos
-
4.2.1. Установка Rust (устанавливает текущую стабильную версию):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
4.2.2. Настройка переменных окружения:
source $HOME/.cargo/env -
4.2.3. Добавление поддержки WebAssembly:
rustup target add wasm32-unknown-unknown -
4.2.4. Установка инструмента сборки cargo-leptos:
cargo install --locked cargo-leptos -
4.3. Установка и настройка ScyllaDB
Установка выполняется непосредственно в систему Debian 12 с использованием официального репозитория ScyllaDB.
-
4.3.1. Обновление индексов пакетов:
sudo apt-get update -
4.3.2. Установка необходимых системных утилит:
sudo apt-get install -y apt-transport-https curl gnupg -
4.3.3. Добавление официального репозитория ScyllaDB в систему:
curl -sSf https://get.scylladb.com/server | sudo bash -
4.3.4. Интерактивная настройка и установка ScyllaDB:
sudo scylla_setup -
4.3.5. Запуск службы сервера ScyllaDB:
sudo systemctl start scylla-server -
4.3.6. Проверка статуса узлов кластера:
nodetool status
5. Подготовка базы данных
Перед первым запуском проекта необходимо создать Keyspace в ScyllaDB.
-
Войдите в консоль базы данных:
cqlsh -
И выполните запрос:
CREATE KEYSPACE IF NOT EXISTS prototype WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
6. Запуск проекта
-
6.1. Клонирование репозитория проекта:
git clone https://github.com/AndrewShedov/enter-text--LARS && cd enter-text--LARS/main -
6.2. Запуск проекта:
cargo leptos watch
После завершения сборки, приложение будет доступно по адресу:
http://127.0.0.1:3000
Таблица data внутри keyspace prototype будет создана автоматически при первом обращении приложения к базе данных, благодаря встроенной логике Auto-Schema.
По умолчанию ScyllaDB настроена на работу по адресу 127.0.0.1:9042.
Вы можете проверить адрес, введя команду в терминал:
-
cqlshПосле ввода команды, должен отобразиться адрес:
Connected to at 127.0.0.1:9042
Поделиться
USDT (TRON (TRC20)): TTvJdwtL3VAZKSHbYi8B2eQEQDxbHUD4Ka
POL (Polygon PoS): 0x97377684b9a589eca92e2c6c8430e6dcf2bae8c2
ETH (Base Mainnet): 0x97377684b9a589eca92e2c6c8430e6dcf2bae8c2
ETH (ERC20): 0x97377684b9a589eca92e2c6c8430e6dcf2bae8c2
BTC (BTC): 12GkhJZWrdn23PUerGerN7nSZXHwWGm59U








Прокомментировать в