j'utilise
# my_app.rb
load 'index.rb'
et démarrez le serveur comme ça
ruby my_app.rb
mais il ne recharge jamais les modifications que j'ai faites dans la page d'index.
Ai-je manqué quelque chose ici?
Voir la FAQ Sinatra ,
"Comment puis-je recharger mon application Sinatra après les modifications?"
Tout d'abord, le rechargement de code en cours dans Ruby est difficile et il est techniquement impossible de disposer d'une solution qui fonctionne pour chaque scénario.
C'est pourquoi nous vous recommandons d'effectuer un rechargement hors processus.
Vous devez d'abord installer la réexécution 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 recharger est à la place de faire ceci:
$ rerun 'ruby app.rb'
Si vous utilisez par exemple le rackup, procédez comme suit:
$ réexécuter 'rackup'
Vous avez eu l'idée.
Si vous souhaitez toujours un rechargement en cours, vérifiez
Sinatra::Reloader
.
rerun
. Vous n'êtes pas limité avec les options par défaut, c'est-à-dirererun 'rackup'
. Il est possible d'exécuter n'importe quel serveur sur n'importe quel port. Voici un exemple comment exécuter Puma sur le numéro de port 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
Remarque : il ne rechargera que les gestionnaires sinatra (et, peut-être certaines 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
etafter_reload
- https://github.com/sinatra/sinatra/pull/1150la source
require "./my-file"
sans succèsrequire
ne recharge pas le fichier, s'il était déjà requis. Vous à laload
place.server.rb
Cependant, je dois réenregistrer mon fichier pour qu'il recharge mon fichier externe. Il ne vérifie pas mon fichier externe seul, je dois donc le réenregistrersever.rb
chaque fois que j'apporte une modification à mon fichier externe. shotgun semble mieux fonctionner à cet égard, mais il semble également recharger les sessions de la base de données.configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Vous pouvez utiliser la
rerun
gemme.OU si vous utilisez rackup
la source
gem installer sinatra-reloader
Vous pouvez définir la variable d'environnement sur développement et charger conditionnellement le gem.
la source
Lorsque vous exécutez l'application avec Passenger Standalone , créez simplement un
tmp/always_restart
fichier:Voir la documentation des passagers pour plus d'informations.
la source
J'aime le bijou Shotgun. Si vous utilisez une application Sinatra modulaire et que vous avez un fichier config.ru, il est facile à exécuter.
Découvrez le bijou ici . C'est assez simple et aucune configuration n'est nécessaire.
la source
Sous Windows, j'utilise ma gemme de redémarrage pour cela:
ou, avec rackup:
Voir ici pour plus d'informations, j'espère que vous le trouverez utile.
la source
Vous pouvez utiliser garde-rack. Tiré d'un article sur dblock.org :
Ajoutez ceci à votre Gemfile:
Ensuite, créez un
Guardfile
à la racine de votre projet avec ce contenu:Enfin, lancez Guard, comme ceci :,
bundle exec guard
etrackup
rechargera à chaque fois.la source
Si vous ne modifiez que vos modèles, sinatra les rendra toujours si vous définissez votre environnement en développement:
la source