Faire tourner et déployer des applications Ruby on Rails sur AlwaysData

AlwaysData est le meilleur hébergeur avec lequel j’ai travaillé en près de vingt ans, tout en étant le moins cher — ne me demandez pas comment ils réussissent cet exploit ! Voici comment simplifier le déploiement d’applications Ruby avec Capistrano, en gérant automatiquement la version de Ruby et le redémarrage de Puma sur leur infra.

Tags : AlwaysData Capistrano Puma Ruby

Publié le 12 mai 2026

Sélectionner la version de Ruby

AlwaysData fournit presque toutes les versions de Ruby précompilées, ce qui est appréciable. Ils proposent aussi Python, PHP, Node, Java, Elixir, et même .net et Deno ! Au moment où j’écris ces lignes, la version Ruby la plus ancienne disponible est la 1.8.7.

Pour changer de version Ruby globalement, allez dans Environnement puis sélectionnez soit une version majeure (qui utilisera automatiquement la dernière mineure), soit une version mineure précise.

Vous pouvez également choisir une version spécifique pour chaque application web, avec le même mécanisme majeure/mineure.

Si la version souhaitée n’a pas encore été compilée, vous pouvez soit la compiler vous-même, soit utiliser rbenv, ou rv. J’imagine que mise fonctionne aussi.

Utiliser .ruby-version

Si vous préférez gérer la version depuis l’application elle-même, comme c’est courant, changez le type d’application de “Ruby Rack” à “Programme personnalisé”, puis utilisez la commande suivante :

sh -c 'RUBY_VERSION="$(cat .ruby-version)" exec bundle exec puma --environment production'

Décomposons cette commande :

  1. Elle lance un shell pour exécuter la commande suivante
  2. Dans ce shell, la variable d’environnement RUBY_VERSION reprend le contenu de .ruby-version
  3. Enfin, Bundler charge les gemmes définies dans le dossier et lance Puma en environnement de production

Redémarrer Puma après un déploiement Capistrano sur AlwaysData

Je n’ai pas réussi à redémarrer Puma avec la gemme capistrano-puma car elle utilise systemd, qui n’est pas autorisé sur AlwaysData pour des raisons de sécurité (sur les plans de type VPS).

Il existe cependant une solution simple : créer un fichier exécutable qui appelle l’API AlwaysData via curl, et l’exécuter lors du déploiement avec Capistrano.

Créer puma-restart

Vous aurez besoin de quelques informations depuis le panneau d’administration AlwaysData :

  • Nom du compte : visible dans le menu en haut à droite
  • Clé API : dans Profil → Tokens
  • SITE_ID : visible dans l’URL lors de l’édition de votre site, ex. https://admin.alwaysdata.com/site/123456/

Définissez API_KEY comme variable d’environnement dans la configuration du site — ne la codez pas en dur dans le script.

cat << EOF > bin/puma-restart
#!/bin/bash

# Config
if [ -z "\${ALWAYSDATA_API_KEY}" ]; then
  echo "Erreur : la variable d'environnement ALWAYSDATA_API_KEY n'est pas définie."
  echo "Visitez https://admin.alwaysdata.com/token/add/"
  exit 1
fi
if [ -z "\${ALWAYSDATA_ACCOUNT_NAME}" ]; then
  echo "Visitez https://admin.alwaysdata.com/subscription/"
  exit 1
fi
if [ -z "\${ALWAYSDATA_SITE_ID}" ]; then
  echo "Visitez https://admin.alwaysdata.com/site/"
  exit 1
fi

# Requête POST
status=\$(curl \
  --user "\${ALWAYSDATA_API_KEY} account=\${ALWAYSDATA_ACCOUNT_NAME}:" \\
  --data '' \\
  --silent \\
  --output /dev/null \\
  --write-out '%{http_code}' \\
  "https://api.alwaysdata.com/v1/site/\${ALWAYSDATA_SITE_ID}/restart/")

# Affichage de la confirmation
if [ "\$status" = 204 ];
then
    echo "Application redémarrée"
else
    echo "Échec du redémarrage. Essayez via le panneau d'administration :"
    echo "https://admin.alwaysdata.com/site/\#{ALWAYSDATA_SITE_ID}/"
    exit 1
fi
EOF

# Rendre le fichier exécutable
chmod +x bin/puma-restart

Configurez ensuite les variables d’environnement ALWAYSDATA_API_KEY, ALWAYSDATA_ACCOUNT_NAME et ALWAYSDATA_SITE_ID.

Ajouter une tâche de déploiement

cat << EOF > lib/capistrano/tasks/deploy.rake
# frozen_string_literal: true

namespace :deploy do
  desc "Redémarrer l'application"
  task :restart do
    on roles(:app) do
      within current_path do
        execute "bin/puma-restart"
      end
    end
  end
  # Redémarrer Puma après le déploiement
  after "deploy:finished", "deploy:restart"

  desc "Empêcher le déploiement si la version de Ruby n'est pas disponible"
  task :check_available_ruby do
    on roles(:app) do
      required_version = File.read(".ruby-version").strip
      actual_version = capture("RUBY_VERSION=#{required_version} ruby --version 2>&1")
      unless actual_version.include?(required_version)
        error "Ruby #{required_version} n'est pas disponible sur le serveur."
        error "Vérifiez les versions disponibles sur https://admin.alwaysdata.com/environment/ruby/"
        exit 1
      end
    end
  end
  before "deploy:starting", "deploy:check_available_ruby"
end
EOF

Tout committer

git add bin/puma-restart
git add tasks/capistrano/deploy.rake
git commit -m "Redémarrer Puma au déploiement Capistrano"

Conclusion

Et voilà, vous pouvez désormais déployer des applications Rails sur AlwaysData, la version de Ruby correspondra automatiquement à celle qui est configurée dans le projet.

Page précédente Page précédente Page suivante Page suivante