J'utilise
# my_app.rb
load 'index.rb'
et lancez la séparation comme ceci
ruby my_app.rb
mais il ne recharge jamais les modifications que j'ai apportées à la page d'index.
Est-ce que j'ai manqué quelque chose ici ?
J'utilise
# my_app.rb
load 'index.rb'
et lancez la séparation comme ceci
ruby my_app.rb
mais il ne recharge jamais les modifications que j'ai apportées à la page d'index.
Est-ce que j'ai manqué quelque chose ici ?
Voir le FAQ sur Sinatra ,
"Comment faire pour que mon application Sinatra se recharge en cas de changement ?"
Tout d'abord, le rechargement de code en cours de processus en Ruby est difficile et le fait d'avoir une solution qui fonctionne pour tous les scénarios est techniquement impossible.
C'est pourquoi nous vous recommandons de faire un rechargement hors processus.
Vous devez d'abord installer réexécuter si vous ne l'avez pas déjà fait :
$ gem install rerun
Maintenant si vous démarrez votre application Sinatra comme ceci :
$ ruby app.rb
Tout ce que vous avez à faire pour le rechargement est plutôt de faire ceci :
$ rerun 'ruby app.rb'
Si vous utilisez par exemple rackup, faites plutôt ce qui suit :
$ rerun 'rackup'.
Vous voyez l'idée.
Si vous voulez toujours recharger en cours de fabrication, consultez le site
Sinatra::Reloader
.
Shotgun nécessite un config.ru minimal. Si vous n'en avez pas déjà un, créez-le et mettez-y "require './my_app'" (où my_app.rb est votre application ruby) et vous serez prêt.
Petit complément à pour rerun
. Vous n'êtes pas limité aux options par défaut, à savoir rerun 'rackup'
. Il est possible d'exécuter n'importe quel serveur sur n'importe quel port. Voici un exemple pour faire fonctionner Puma sur le port 5678. rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem install sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Note il ne rechargera que les handlers sinatra (et, peut-être quelques commandes de configuration du serveur sinatra), mais pas les fichiers personnalisés, que vous devez recharger manuellement.
UPD après 9 ans : il semble qu'il soit déjà possible de recharger d'autres fichiers en utilisant also_reload
, dont_reload
y after_reload
-- https://github.com/sinatra/sinatra/pull/1150
Hey @Nakilon, comment dois-je procéder pour recharger ces fichiers manuellement ? Je suis en train de faire require "./my-file"
sans succès
@kristianlm, require
ne recharge pas le fichier, s'il a déjà été requis. Vous load
à la place.
Vous avez raison. Je dois réenregistrer mon server.rb
pour qu'il recharge mon fichier externe. Il ne vérifie pas uniquement mon fichier externe, je dois donc réenregistrer mon sever.rb
à chaque fois que j'apporte une modification à mon fichier externe. fusil de chasse semble mieux fonctionner à cet égard, mais il semble aussi recharger les sessions de la base de données.
Lorsque vous exécutez l'application avec Passager autonome il suffit de créer un tmp/always_restart
fichier :
$ touch tmp/always_restart.txt
Voir Passager documentation pour plus d'informations.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.