Réponses:
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-à-dire rerun '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'
gem installer sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
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
et after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
sans succès
require
ne recharge pas le fichier, s'il était déjà requis. Vous à la load
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éenregistrer sever.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
Lorsque vous exécutez l'application avec Passenger Standalone , créez simplement un tmp/always_restart
fichier:
$ touch tmp/always_restart.txt
Voir la documentation des passagers pour plus d'informations.
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.
shotgun config.ru
Découvrez le bijou ici . C'est assez simple et aucune configuration n'est nécessaire.
Sous Windows, j'utilise ma gemme de redémarrage pour cela:
restart ruby my_app.rb
ou, avec rackup:
restart rackup
Voir ici pour plus d'informations, j'espère que vous le trouverez utile.
Vous pouvez utiliser garde-rack. Tiré d'un article sur dblock.org :
Ajoutez ceci à votre Gemfile:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Ensuite, créez un Guardfile
à la racine de votre projet avec ce contenu:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Enfin, lancez Guard, comme ceci :, bundle exec guard
et rackup
rechargera à chaque fois.