Une alternative à Heroku
Étant donné que le niveau gratuit de Heroku n’est plus disponible, vous devez envisager de déployer votre application dans d’autres fournisseurs qui vous permettent de le faire gratuitement.
Les processus de Heroku sont vraiment simples lors du déploiement d’une application RoR, qu’il s’agisse d’une pile complète ou d’une API uniquement, et si vous pouvez vous permettre les frais mensuels, je dirais que cela en vaut la peine.
Cependant, pour les développeurs qui commencent leur carrière, comme moi, il existe d’autres services qui ont encore des niveaux gratuits pour déployer des applications RoR, si vous savez que chacun d’entre eux a ses configurations uniques. L’un de ces services est Render.com et le but de cet article est de montrer le processus de déploiement d’une application API uniquement, étant donné que le processus de déploiement d’une application Full-Stack est déjà expliqué sur Render’s Documentation.
Configurez votre référentiel avec PostgreSQL
Ruby on Rails est livré avec SQLite3 configuré par défaut, vous devez donc installer PostgreSQL dans votre application.
Si vous créez un nouveau projet à partir de rien, vous devez utiliser :
rails new mysite --database=postgresql
Si vous déployez un référentiel existant, vous devez vous assurer que dans votre Gemfile la ligne :
gem 'sqlite3'
Est remplacé par :
gem 'pg'
Ensuite, pour installer les dépendances, vous devez exécuter :
bundle install
Vous devez pousser vos modifications dans GitHub, car Render vous permet de déployer chaque fois que la branche configurée est poussée.
Remarque : Si votre projet est déployé dans un service différent et que vous pensez que les configurations suivantes peuvent entrer en conflit avec celui-ci, envisagez de créer une branche distincte.
Enfin, vous devez vérifier le config/database.yml
fichier contient le postgresql
adaptateur dans la section par défaut, comme suit :
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
Et dans la section de production, généralement à la fin du fichier, vous devez remplacer les valeurs par défaut :
production:
<<: *default
database: mysite_production
username: mysite
password: <%= ENV['MYSITE_DATABASE_PASSWORD'] %>
À la configuration suivante, vous pouvez donc inclure la variable d’environnement DATABASE_URL :
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
Modifier les configurations du projet
Ouvert config/puma.rb
et décommentez la ligne workers et la preload_app
ligne:
Puma can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers: a minimum and maximum.
# Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record.
#
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
port ENV.fetch("PORT") { 3000 }
# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch("RAILS_ENV") { "development" }
# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked web server processes. If using threads and workers together
# the concurrency of the application would be max `threads` * `workers`.
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
workers ENV.fetch("WEB_CONCURRENCY") { 4 }
# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory.
#
preload_app!
# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart
Ouvert open/environments/production.rb
et trouvez la ligne suivante :
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
Et puis ajoutez le RENDER
variables comme suit :
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER'].present?
Créer une base de données PostgreSQL
Render permet aux utilisateurs de créer une base de données PostgreSQL qui dure 90 jours dans le niveau gratuit. Vous pouvez toujours en créer un nouveau lorsque l’ancien expire. Le processus de création d’un se déroule comme suit:
- Se connecter à rendu.com ou créez un nouveau compte si vous ne l’avez pas déjà fait. Vous pouvez utiliser votre compte GitHub pour permettre à vos référentiels d’être déployés en push.
- Dans la barre de navigation, cliquez sur le bouton Nouveau et sélectionnez l’option PostgreSQL :
- Choisissez un nom et une région. Vous pouvez également personnaliser le nom, l’utilisateur et la version de la base de données si vous en avez besoin.
- Choisissez le type de plan gratuit et cliquez sur Créer une base de données
- Attendez que la base de données nouvellement créée soit déployée, puis copiez son URL de la base de données interne et enregistrez-le pour plus tard.
Créer un script de génération
Maintenant, nous devons créer un script de construction. Ce script diffère lors du déploiement d’une application API uniquement des instructions trouvées dans Render Docs, et cela peut causer beaucoup de maux de tête. Pour les applications API uniquement, vous devez créer un fichier appelé bin/render-build.sh
et collez ce qui suit :
#!/usr/bin/env bash
# exit on error
set -o errexitbundle install
bundle exec rake db:migrate
Si vous souhaitez charger des valeurs de départ pour votre base de données, vous devez ajouter la ligne suivante à la fin du fichier :
bundle exec rake db:seed
Ensuite, assurez-vous que le script est exécutable en exécutant la commande suivante dans la console :
chmod a+x bin/render-build.sh
Ensuite, poussez les modifications et vous êtes prêt à déployer.
Créer un service Web
Vous pouvez maintenant créer un service Web dans Render en cliquant sur Nouveau >> Service Web.
Dans la fenêtre suivante, configurez votre compte GitHub si vous ne l’avez pas fait. Ensuite, vous pouvez choisir le référentiel que vous souhaitez déployer. Trouvez-le et cliquez sur Connecter.
Ensuite, vous pouvez configurer un nom unique, la région et la branche que vous souhaitez déployer, au cas où vous ne voudriez pas déployer la branche GitHub par défaut.
Important:
Assurez-vous que l’environnement est défini sur Ruby. Assurez-vous d’effacer la commande de génération et de la définir sur :
./bin/render-build.sh
Qui appelle le script précédemment créé. Effacez également la commande de démarrage et réglez-la sur :
bundle exec puma -C config/puma.rb
Vous devriez avoir votre configuration comme suit :
Ensuite, vous pouvez vérifier le type de plan et vous assurer qu’il est défini sur gratuit. Ensuite, vous devez cliquer sur le bouton Avancé.
Vous devez maintenant ajouter toutes les variables d’environnement requises par votre application. Les deux variables obligatoires sont :
DATABASE_URL => The internal database URL that you saved above form you PostgreSQL service
RAILS_MASTER_KEY => Paste contents of the config/master.key file
Enfin, vous pouvez cliquer sur Créer un service Web et vous pouvez vérifier la progression du déploiement. Je vous recommande de vérifier les journaux pour vous assurer que tout a fonctionné correctement. Si vous avez suivi ces étapes, votre application devrait se déployer avec succès.