Comment utiliser Ruby sur un Hébergement Web Gandi

L’instance Hébergement Web Ruby vous permet de publier des applications web écrites en Ruby facilement et à un prix abordable.

Prérequis

Les utilisateurs d’instances Ruby Hébergement Web devraient avoir :

  • une certaine connaissance du langage Ruby

  • une certaine connaissance de git

  • une application compatible avec Ruby (MRI) 2.4

  • une application compatible avec Rack.

  • une application qui utilise Bundler pour gérer les dépendances.

Les outils suivants doivent également être installés localement sur votre ordinateur :

  • ruby

  • bundler

  • git

  • client SSH

La structure des répertoires

Pour être compatible avec Rack, les fichiers de votre application doivent respecter une mise en page spécifique, contenant les répertoires et fichiers suivants :

  • config.ru` : Un fichier Rackup comme celui spécifié dans la documentation Rack documentation.

  • public/ : Si vous avez des fichiers statiques, ils doivent être placés dans ce répertoire.

Ruby on Rails applications (rails >2) devrait fonctionner hors de la boîte.

Exemple de structure de fichier :

.
├── config.ru
└── public
    └── robots.txt

Installation des dépendances

Pour que les dépendances de votre application Ruby soient installées, vous devez les déclarer dans un fichier Gemfile placé à la racine de votre projet. Ce fichier doit correspondre au format indiqué dans la documentation du Bundler.

Exemple Gemfile:

source 'https://rubygems.org'
gem 'rails', '~> 4.0.0'
gem 'debugger', group: :development

Note

Pendant l’installation des dépendances, les gemmes spécifiées dans les groupes development et test ne seront pas installées.

installation bundle

Une fois vos dépendances déclarées, vous devez générer un fichier Gemfile.lock en exécutant la commande bundle install sur votre ordinateur.

C’est le fichier qui sera utilisé pour installer les dépendances de votre instance. Il doit donc être inclus dans votre arbre git et poussé le long de votre application.

Domaines

Un nom de domaine est automatiquement lié à votre instance au moment de sa création à des fins de test. Vous pouvez lier un certain nombre de domaines et sous-domaines supplémentaires à votre instance. Tous utiliseront la même base de code d’application.

Si vous souhaitez que différents domaines soient acheminés vers différentes applications Ruby sur une seule instance d’hébergement simple, vous devrez configurer le routage vous-même dans le fichier config.ru.

Un exemple simple :

map 'http:​//www.example.com/' do
     run Proc.new { |env|
        [200, {'Content-Type' => 'text/html; charset="utf-8"'},
             ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works',
             "</title><b>It works!</b><br /><br />You've reached ",
             'www.example.com'
            ]
        ]
     }
end

map 'http:​//www.autre-example.com/' do
     run Proc.new { |env|
        [200, {'Content-Type' => 'text/html; charset="utf-8"'},
             ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works',
             "</title><b>It works!</b><br /><br />You've reached ",
             'www.autre-example.com'
            ]
        ]
     }
end

Bases de données

Comme les autres types d’Hébergement Web Gandi, les instances Ruby supportent deux types de bases de données : MySQL et PostgreSQL.

PostgreSQL

PostgreSQL est disponible pour Hébergement Web avec Ruby.

Paramètres de connexion :

Adresse: localhost
Port : 5432

Par défaut, vous pouvez utiliser l’utilisateur hosting-db` sans mot de passe pour vous connecter à la base de données par défaut, appelée postgres. Nous vous recommandons de créer des informations d’identification sécurisées pour une utilisation dans le monde réel.

Vous pouvez créer autant de bases de données et d’utilisateurs de bases de données que vous le souhaitez ; vous n’êtes limité que par votre espace disque, que vous pouvez augmenter à tout moment jusqu’à 1 To.

Vous pouvez gérer votre base de données PostgreSQL avec les commandes shell standard via la console SSH (psql, pg_dump, etc.), ou depuis le panneau d’administration Web avec phpPgAdmin. Consultez l’article de référence sur la gestion de PostgreSQL sur Hébergement Web pour en savoir plus.

Voici un exemple de configuration config/database.yml pour Ruby on Rails qui utilise la base de données par défaut.

production:
  adapter: postgresql
  database: ruby-example
  host: localhost
  port: 5432
  username: hosting-db
  password:
  encoding: unicode
  pool: 5

MySQL

MySQL est disponible pour une utilisation avec les Hébergement Web Gandi Ruby.

Paramètres de connexion :

Socket: /srv/run/mysqld/mysqld.sock

Vous pouvez vous connecter au service de base de données MySQL via son socket Unix, disponible sur /srv/run/mysqld/mysqld/mysqld.sock. L’utilisateur par défaut est root et aucun mot de passe n’est requit par défaut. Cependant, vous devez créer des informations d’identification sûres pour une utilisation dans le monde réel. Vous pouvez également utiliser la base de données default_db pour des réglages rapides et des tests, car elle est automatiquement configurée lors de la création de l’instance.

Vous pouvez créer autant de bases de données et d’utilisateurs de bases de données que vous le souhaitez ; vous n’êtes limité que par votre espace disque, que vous pouvez augmenter à tout moment jusqu’à 1 To.

Vous pouvez gérer votre base de données MySQL avec les outils shell standard (mysql, mysqldump, etc.) via la console SSH, ou depuis la console d’administration web avec PHPMyAdmin. Consultez l’article de référence sur la gestion de MySQL sur Hébergement Web pour en savoir plus.

Voici un exemple config/database.yml pour Ruby on Rails avec une base de données MySQL :

production:
  adapter: mysql2
  socket: /srv/run/mysqld/mysqld.sock
  database: default_db
  username: root
  password:
  encoding: utf-8
  pool: 5

Pousser votre application vers votre instance

Vous devez utiliser git pour pousser votre application vers votre instance et pour la déployer. Suivez les instructions ci-dessous pour en savoir plus.

Créer un dépôt git local

Tout d’abord, dans le répertoire racine de votre projet sur votre machine locale, exécutez les commandes suivantes pour initialiser un repo Git pour suivre les changements de votre code :

$ git init
$ git add .
$ git commit -m "Initial commit"

Note

Rappelez-vous que votre arbre git devrait inclure au moins un fichier config.ru pour démarrer votre application. Il devrait également suivre les fichiers Gemfile et Gemfile.lock si vous souhaitez installer des dépendances.

Déploiement de votre application

Note

Les instructions suivantes sont disponibles dans la page Déployer de votre page de gestion des instances. Vous y trouverez également la valeur de la variable $GIT_URL utilisée dans les exemples ci-dessous.

Une fois que votre code est suivi par git localement, vous pouvez pousser et déployer vers votre instance.

$ git remote add gandi $GIT_URL
$ git push gandi master
$ ssh $GIT_URL deploy default.git

Pour déployer une branche ou une balise particulière (une branche production, par exemple), il suffit de la spécifier comme deuxième argument :

$ git push gandi production
$ ssh $GIT_URL deploy default.git production

Journaux et dépannage

La sortie standard (stdout) ainsi que les erreurs liées à l’exécution de l’application sont stockées dans les fichiers journaux suivants sur le disque de données de votre instance :

  • via SSH : /srv/data/var/log/www/uwsgi.log.

  • via SFTP : /lamp0/var/log/www/uwsgi.log.

Ceci est utile, par exemple, pour vérifier que votre application a démarré correctement.

Cron jobs

Comme les autres familles d’Hébergement Web Gandi, il est possible d’exécuter des tâches planifiées (cron jobs) sur des instances Ruby. Les variables d’environnement définies par votre application sont également disponibles dans vos jobs cron (voir `internal_design`_pour plus de détails sur les variables d’environnement).

Exemple de cron job :

1@hourly 0 test (cd /srv/data/web/vhosts/default; rake my_namespace:some_useful_task)

Pour plus d’informations sur cron jobs et l’Hébergement Web Gandi, consultez la documentation Anacron.

Conception interne

Les instances Ruby utilise Uwsgi pour exécuter le code de votre application. Apache est utilisé pour servir les fichiers statiques. “Apache <https:​//httpd.apache.org/>”_ servira les fichiers qui existent dans un répertoire nommé public/ à la racine de votre projet et relaiera toutes les autres requêtes à Uwsgi.

Les variables d’environnement suivantes sont assignées et disponibles dans votre application et dans les jobs cron :

  • RAILS_ENV=production

  • RACK_ENV=production