CyberTrainGuidesInstaller cybertrain

Installer cybertrain

Ce dont CyberTrain a besoin sur votre machine, comment installer la commande cybertrain, toutes les commandes qu’elle propose, et comment elle installe Spinel et le framework à votre place.

Pour essayer CyberTrain sans rien installer, ouvrez le bac à sable : GitHub Codespaces ouvre le blog du tutoriel, la commande cybertrain et Spinel 2026.10.27.7020 dans VS Code, dans votre navigateur. La même image tourne aussi en local avec Docker.

Prérequis

  • Spinel 2026.10.27.7020 (Cybertrain::SPINEL_TAG, la même version que SPINEL_TAG dans .github/workflows/ci.yml), une version de saeki-mototsune/spinel (Cybertrain::SPINEL_REPOSITORY), le fork de matz/spinel qui intègre les corrections dont CyberTrain a besoin avant une version amont ; non testé avec d’autres versions. Vous ne l’installez pas à la main : la commande cybertrain compile cette version dans ~/.cybertrain la première fois qu’elle en a besoin (cybertrain setup le fait à la demande), sauf si un spinel de cette version est déjà dans le PATH — voir Comment Spinel est installé.
  • Pour le compiler : une chaîne de compilation C (cc, ou le compilateur désigné par CC) et make — Spinel compile chaque programme en C —, plus git et curl.
  • En-têtes et bibliothèque SQLite 3 (libsqlite3-dev sous Debian/Ubuntu ; fournis avec les Command Line Tools de Xcode sous macOS) — les modèles utilisent directement la FFI de Spinel, pas une gem.
  • En-têtes et bibliothèque zlib (zlib1g-dev sous Debian/Ubuntu ; dans le SDK de macOS) — les corps de requête gzip (request.decoded_body) sont décompressés par la zlib du système, liée de la même façon.
  • Ruby 3.2+ et RubyGems, uniquement pour la commande cybertrain (les applications ne tournent jamais sur CRuby) ; avec Ruby 3.2, la compilation de Spinel demande aussi la gem prism (ci-dessous).

cybertrain doctor vérifie ces outils et en-têtes ainsi que l’installation de Spinel ; quand un élément requis manque, il affiche aussi la commande d’installation pour votre plateforme.

Autres paquetsprism avec Ruby 3.2 ; OpenSSL et jemalloc, facultatifs
  • La compilation de Spinel demande la gem prism de Ruby, que Ruby 3.3 et plus récent incluent ; avec Ruby 3.2, gem install prism (avec les en-têtes de développement de Ruby, ruby-dev sous Debian/Ubuntu). cybertrain doctor le vérifie.
  • Les en-têtes OpenSSL (libssl-dev) sont facultatifs : sans eux, Spinel est compilé sans son paquet openssl, que CyberTrain n’utilise pas. Sous macOS, une application qui requiert openssl a besoin de l’OpenSSL de Homebrew (keg-only) dans les chemins du compilateur : export LIBRARY_PATH="$(brew --prefix openssl@3)/lib" CPATH="$(brew --prefix openssl@3)/include".
  • Le paquet de développement de jemalloc (libjemalloc-dev ; brew install jemalloc) est facultatif : une application n’en a besoin qu’une fois que son spin.toml indique allocator = "jemalloc", ligne que cybertrain new écrit en commentaire. Cela vaut la peine de l’activer en production : de 1,1 à 1,4 fois plus de requêtes par seconde sur examples/blog (docs/benchmark.md).

Installer la CLI

terminal — n’importe quel répertoireshell
gem install cybertrain
cybertrain doctor

La première ligne installe la commande depuis RubyGems et la seconde vérifie les prérequis ; le tutoriel continue à partir de là, de cybertrain new à cybertrain build.

La commande cybertrain

cybertrain help affiche ces commandes :

  • cybertrain new NAME [--path DIR | --version V | --git URL [--ref R]] [--skip-spin] crée une application dans NAME, puis y lance spin lock et spin run gen, en installant d’abord Spinel si nécessaire.
  • cybertrain generate scaffold NAME field:type ... (alias g scaffold) ajoute une ressource à l’application du répertoire courant.
  • cybertrain generate authentication y ajoute la connexion par adresse e-mail et mot de passe : les tables users et sessions, les modèles User et Session, les contrôleurs et vues de connexion et d’inscription, les routes, un before_action dans ApplicationController et un test (voir Ajouter la connexion). Avec --invite-only, il n’y a pas de page d’inscription : les utilisateurs sont créés avec ./NAME user EMAIL, et le premier aussi sur une page /setup qui ne répond qu’à la machine du serveur elle-même, avec le jeton à usage unique qu’affiche son avertissement de démarrage, tant qu’aucun utilisateur n’existe.
  • cybertrain generate attachment MODEL FIELD [--any] ajoute l’envoi d’un fichier à un modèle généré par scaffold : cinq colonnes de métadonnées, des méthodes et callbacks de modèle, une action de téléchargement, la route, le champ de formulaire et un test (voir Ajouter une image de couverture). Un champ de scaffold cover:attachment fait la même chose.
  • cybertrain db migrate génère, applique les migrations en attente, puis génère à nouveau (spin run gen; spin run db -- migrate; spin run gen) ; cybertrain migration est conservé comme alias.
  • cybertrain db COMMAND... lance toute autre commande de base de données après spin run gen : status, rollback [N] (qui génère à nouveau ensuite), schema:dump, create.
  • cybertrain server [PORT] génère, puis démarre le serveur de développement (spin run gen; spin run NAME, ou spin run NAME -- PORT ; port 3000 par défaut).
  • cybertrain build compile NAME avec app/views/ intégré et assemble dist/ (le binaire, public/, storage/, tmp/).
  • cybertrain spin ARGS... lance spin avec le Spinel épinglé, depuis n’importe quel répertoire (cybertrain spin test, cybertrain spin run gen -- --check).
  • cybertrain setup [--force] installe Spinel 2026.10.27.7020 dans ~/.cybertrain, sauf si un spinel de cette version est déjà dans le PATH ; --force recompile la copie sous ~/.cybertrain.
  • cybertrain doctor vérifie la chaîne de compilation C, les en-têtes SQLite et l’installation de Spinel.
  • cybertrain version affiche la version.

db, server et build s’exécutent dans une application ; NAME est le [package] name de son spin.toml.

Comment Spinel est installé

Chaque commande qui lance spin (new, db, server, build, spin) s’assure d’abord qu’un Spinel de la version de Cybertrain::SPINEL_TAG est disponible. Un spinel du PATH (accompagné d’un spin) dont spinel --version indique cette version est utilisé tel quel ; sinon, la copie que cybertrain conserve sous ~/.cybertrain/spinel/2026.10.27.7020/ est utilisée ; sinon, cybertrain compile cette copie à partir du tag de version de Cybertrain::SPINEL_REPOSITORY (git clone, make deps, make -j, make install PREFIX=...), une seule fois, en quelques minutes. Le journal de compilation est ~/.cybertrain/log/spinel-2026.10.27.7020-build.log (ses dernières lignes sont affichées si une étape échoue).

S’il manque un outil nécessaire à la compilation, cybertrain indique lequel et affiche la commande d’installation pour votre plateforme avant de commencer. Un spinel d’une autre version présent dans le PATH n’est jamais utilisé ni modifié : cybertrain conserve sa propre copie (et le signale quand il l’installe).

cybertrain setup fait la même chose à la demande et, chaque fois que c’est sa propre copie qui est utilisée, affiche la ligne qui la place dans le PATH, pour lancer spin vous-même :

terminal — n’importe quel répertoireshell
export PATH="$HOME/.cybertrain/bin:$PATH"

~/.cybertrain/bin contient des liens spinel et spin vers la version utilisée, la ligne reste donc valable après un changement de version ; cybertrain spin ... n’a besoin d’aucun PATH.

Variables d’environnementCYBERTRAIN_HOME déplace ~/.cybertrain, CYBERTRAIN_SPINEL_HOME utilise une installation existante

Deux variables d’environnement remplacent tout cela :

  • CYBERTRAIN_HOME remplace ~/.cybertrain (un chemin sans espaces, guillemets, $ ni :, que le Makefile de Spinel et le PATH ne supportent pas).
  • CYBERTRAIN_SPINEL_HOME=PREFIX impose une installation existante : cybertrain utilise alors le spinel et le spin de PREFIX/bin (ou de PREFIX lui-même, si spinel s’y trouve directement) et s’arrête sur une erreur s’ils ne sont pas de cette version.

La gem et le framework

gem install cybertrain installe une commande, pas le framework. La gem est la commande cybertrain, du Ruby pur qui s’exécute sur votre machine sous CRuby (3.2 ou plus récent) et appelle pour vous l’outil spin de Spinel ; ni le framework ni Spinel ne sont dans la gem. Le framework est un paquet Spinel dont votre application dépend dans son spin.toml : Spinel le compile à l’avance avec votre code, il ne tourne donc jamais sur CRuby, et c’est la partie qui est livrée. Le binaire de dist/ tourne sans Ruby, sans la gem et sans Spinel.

Ce que cybertrain new écrit

cybertrain new écrit l’application avec un spin.toml qui pointe vers la version correspondant à la CLI (cybertrain = { git = "https://github.com/saeki-mototsune/cybertrain", ref = "v0.3.1" }), s’assure que Spinel est installé, puis lance spin lock (spin récupère le framework dans son cache, ~/.cache/spin/packages/, et épingle le commit dans spin.lock) et spin run gen, un peu comme rails new lance bundle install, et affiche les étapes suivantes. Rien du framework n’est copié dans l’application ; commitez spin.toml et spin.lock.

Si Spinel ou l’une des deux étapes spin échoue, les fichiers restent en place, new sort avec le code 1 et affiche ce qu’il faut lancer une fois la cause corrigée (pour Spinel : cybertrain setup, puis cybertrain spin lock && cybertrain spin run gen dans le nouveau répertoire).

Quatre options changent ce qu’elle écrit et lance :

  • --skip-spin se contente d’écrire les fichiers : pas d’installation de Spinel, pas de spin lock, pas de spin run gen.
  • --path DIR fait plutôt dépendre l’application d’une copie locale du dépôt (--path ~/src/cybertrain, là où se trouve la copie, pour travailler sur CyberTrain lui-même).
  • --git URL [--ref R] fait dépendre l’application du framework situé à URL (à la branche ou au tag R).
  • --version V fait dépendre l’application d’une version de l’index, une fois que le framework sera sur un spin-index.

N’indiquez qu’une seule des options --path, --version et --git ; --ref exige --git.

Passer une application à une nouvelle version

La gem et le framework sont publiés à partir du même tag, leurs versions correspondent donc : la gem 0.3.1 crée des applications qui dépendent du framework v0.3.1. Pour passer une application à une nouvelle version, mettez à jour la gem, faites pointer spin.toml vers le nouveau tag, puis lancez, dans l’application :

terminal — le répertoire de l’applicationshell
cybertrain spin lock
cybertrain spin run gen