Comment obtenir Sinatra à l'auto-reload le fichier après chaque changement?
Question
J'utilise
# my_app.rb
load 'index.rb'
et démarrer le serveur comme ceci
ruby my_app.rb
mais il n'a jamais reload tout changement que j'ai fait à la page d'index.
Ai-je raté quelque chose ici?
La solution
Voir la Sinatra FAQ ,
"Comment puis-je faire mon reload application Sinatra sur les changements?"
Tout d'abord, le code en cours de rechargement dans Ruby est dure et ayant une solution qui fonctionne pour tous les scénarios est techniquement impossible.
Quelle est la raison pour laquelle nous vous recommandons de le faire hors processus de rechargement.
Vous devez d'abord installer réexécutez si vous avez pas déjà:
$ 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 do au lieu ceci:
$ rerun 'ruby app.rb'
Si vous êtes par exemple en utilisant rackup, au lieu faire ce qui suit:
réexécutée $ 'rackup'
Vous avez l'idée.
Si vous voulez toujours en cours de rechargement, consultez
Sinatra::Reloader
.
Autres conseils
gem install-sinatra reloader
require 'sinatra'
require 'sinatra/reloader'
Remarque :. Il rechargera que les gestionnaires (et, sinatra peut-être des commandes de configuration du serveur), mais sinatra pas les fichiers personnalisés, que vous devez recharger manuellement
Vous pouvez utiliser la gemme rerun
.
gem install rerun
rerun 'ruby app.rb'
OU si vous utilisez rackup
rerun 'rackup'
gem install-sinatra reloader
require 'sinatra/base'
require "sinatra/reloader"
class MyApp < Sinatra::Base
register Sinatra::Reloader
get '/' do
"Hello Testing1!"
end
end
Vous pouvez définir la variable d'environnement pour le développement et la charge sous condition la pierre précieuse.
Sous Windows, je me sers de mon redémarrer gem pour cela:
restart ruby my_app.rb
ou, avec rackup:
restart rackup
Voir pour plus d'informations, espérons qu'elle vous sera utile.
Vous pouvez utiliser rack de garde. Tiré de à 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, la Garde courir, comme suit:. bundle exec guard
et rackup
rechargera chaque fois
Si vous ne changez vos modèles sinatra toujours les rerender si vous définissez votre environnement pour le développement:
ruby app.rb -e development