crystal-shards.online

crystal-shards.online

Каталог Crystal-шардов на GitHub: краулер + высокопроизводительный сервер без nginx и без клиентского JavaScript. Поиск — как на rubygems.org: server-side, ранжирование по имени/топикам/описанию + звёзды.

Архитектура

cron (каждые 6ч) ──> bin/crawler
                        │  GitHub API (search + raw shard.yml)
                        │  кэш по pushed_at: неизменённые репо не перекачиваются
                        ├─> data/shards.json          (снапшот, инкрементальный кэш)
                        └─> public/**/*.html          (ECR-шаблоны, sitemap.xml)

bin/server ──> public/            статика через StaticFileHandler
           ──> /search?q=         динамика: память + ECR, hot reload по mtime
  • Ноль зависимостей от шардов: только stdlib (HTTP, JSON, YAML, ECR).
  • ~10k шардов целиком в памяти (~10 МБ); поиск — линейный скоринг, доли миллисекунды на запрос.
  • Clean URLs: /, /categories, /category/db, /shards/owner/repo.
  • SEO: canonical, OpenGraph, sitemap.xml, robots.txt.

Разработка

crystal build --release -o bin/server src/server.cr
crystal build --release -o bin/crawler src/crawler.cr

# тестовый краул (25 репо, без токена работает, но медленно)
CRAWL_LIMIT=25 CRAWL_FROM=2026-01-01 ./bin/crawler

# полный краул — нужен токен https://github.com/settings/tokens (без scopes)
GITHUB_TOKEN=ghp_... ./bin/crawler

# сервер
PORT=8080 ./bin/server

Переменные окружения: см. .env.example.

Деплой (Capistrano)

Требования на сервере: пользователь deploy с sudo, Crystal, git, systemd-юнит из deploy/crystal-shards.service, cron из deploy/crontab.

bundle install
cap production deploy       # сборка кристалла, рестарт сервиса
cap production deploy:crawl # первый краул

shared/.env.production переживает релизы (linked files), data/ тоже.

Категории

Назначаются автоматически: сначала по GitHub topics, затем по ключевым словам в описании. Словарь — src/categories.cr, расширяется тривиально.

Repository

crystal-shards.online

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 0
  • about 5 hours ago
  • September 30, 2026
License

Links
Synced at

Wed, 30 Sep 2026 11:50:44 GMT

Languages