> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.hodi.host/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Comment déployer une application Ruby on Rails ou Sinatra ?

Hodifly déploie les applications **Ruby** depuis GitHub ou GitLab, comme les applications Node, Python ou PHP : vous poussez, Hodifly installe les gems, construit et met en ligne.

||| ⚠️ Attention : une application Ruby tourne en permanence derrière Passenger. Elle nécessite donc un hébergement web **SITE PRO** ou supérieur, comme les applications Node et Python. Les sites statiques et les applications PHP, eux, fonctionnent sur toutes les offres.

## Ce qui est reconnu automatiquement

Hodifly détecte une application Ruby à partir du `Gemfile` et du `config.ru` :

* **Ruby on Rails** : reconnu par `bin/rails` ou `config/application.rb`.
* **Sinatra** : reconnu par la gem `sinatra`.
* **Toute application Rack** : un `config.ru` suffit.

Un dépôt qui contient seulement un `Gemfile` et un `_config.yml` est traité comme un site **Jekyll**, donc comme un site statique : c'est bien ce que vous voulez pour un blog.

## Le point d'entrée : `config.ru`

Passenger démarre votre application à partir du fichier **`config.ru`** placé à la racine du projet. C'est une convention Rack : il n'y a pas de « fichier de démarrage » à renseigner dans les réglages, contrairement aux applications Node.

Votre `config.ru` doit donc exister et se terminer par un `run` :

```
require_relative "config/environment"
run Rails.application
```

## Ce que Hodifly fait à chaque déploiement

* **Bundler** installe les gems dans un espace dédié à votre application. Les groupes `development` et `test` sont ignorés, et ce choix est enregistré pour que l'application démarre avec exactement les mêmes gems que celles installées. Versionnez votre `Gemfile.lock`.
* **`SECRET_KEY_BASE`** est généré une seule fois et conservé hors des versions déployées : vos sessions et vos cookies signés survivent aux déploiements. Vous pouvez le remplacer par une variable d'environnement du projet.
* **Les assets** sont précompilés (`assets:precompile`) pour Rails.
* **Les migrations** sont jouées avant la mise en ligne de la nouvelle version. Une migration en échec laisse la version précédente en place : le site ne casse pas. Posez `HODIFLY_SKIP_MIGRATIONS=1` en variable d'environnement pour désactiver ce comportement.
* **Les données persistantes** : `storage/` (fichiers envoyés par Active Storage) et `log/` vivent hors des versions et sont rattachées à chacune. Elles survivent donc aux déploiements et aux retours arrière. Une base SQLite placée dans `db/` ou `storage/` est également conservée.

||| ⚠️ Attention : un retour arrière restaure le code, mais **pas** le schéma de la base de données.

## Variables d'environnement

Les variables du projet sont transmises à l'application en cours d'exécution : Rails les lit dans `ENV` comme d'habitude. Il n'y a **pas** de fichier `.env` généré (c'est une particularité des applications PHP). Si votre application attend un `.env`, ajoutez la gem `dotenv-rails`.

## Version de Ruby

Choisissez-la dans le **Runtime** des réglages du projet. Elle est pré-remplie à partir de votre `.ruby-version` ou de la ligne `ruby "3.3.0"` de votre `Gemfile`.

Comme pour Python, modifier ces fichiers **après** la création du projet ne suffit pas : l'espace de gems est créé avant le build. Le journal de déploiement vous prévient, et il faut changer le Runtime dans les réglages du projet.

## Déployer dans un sous-dossier

Renseignez `config.relative_url_root` dans `config/application.rb` pour que Rails génère les bonnes URL. Voir [Comment déployer mon site dans un sous-dossier ?](https://help.hodi.host/fr/article/comment-deployer-mon-site-dans-un-sous-dossier-1tnpkgt/).

## Ce qui n'est pas disponible

Les WebSockets (Action Cable en mode persistant) et les processus de fond permanents (Sidekiq, Solid Queue en worker dédié). Pour les traitements différés, utilisez une tâche cron depuis **cPanel > Tâches Cron**.

## À lire aussi

* [Que puis-je déployer sur Hodifly ?](https://help.hodi.host/fr/article/que-puis-je-deployer-sur-hodifly-1w02yb0/)
* [Puis-je revenir en arrière après un mauvais déploiement avec Hodifly ?](https://help.hodi.host/fr/article/puis-je-revenir-en-arriere-apres-un-mauvais-deploiement-avec-hodifly-1dw9uxm/)
