web-dev-qa-db-fra.com

Comment faire pour que Sinatra recharge automatiquement le fichier après chaque modification?

J'utilise 

# my_app.rb
load 'index.rb'

et commencez le serveur comme ça 

Ruby my_app.rb

mais il ne recharge jamais les modifications apportées à la page d'index.
Ai-je manqué quelque chose ici?

112
ez.

Voir le Sinatra FAQ ,

"Comment faire pour que mon application Sinatra soit rechargée avec les modifications?"

Tout d’abord, il est difficile de recharger du code en cours de traitement dans Ruby. Une solution qui fonctionne pour tous les scénarios est techniquement impossible.

C'est pourquoi nous vous recommandons d'effectuer un rechargement hors processus.

Vous devez d’abord installer relancer 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

Pour ce faire, il vous suffit de recharger:

$ rerun 'Ruby app.rb'

Si vous utilisez par exemple rackup, faites plutôt le suivant:

$ relance 'rackup'

Vous avez eu l'idée.

Si vous souhaitez toujours effectuer un rechargement en cours de processus, consultez Sinatra::Reloader .

191
dbr

gem installer sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'

Remarque : il ne rechargera que les gestionnaires sinatra (et éventuellement certaines commandes de configuration du serveur sinatra), mais pas les fichiers personnalisés, que vous devez recharger manuellement.

42
Nakilon

Vous pouvez utiliser la gemme rerun

gem install rerun
rerun 'Ruby app.rb' 

OU si vous utilisez rackup

rerun 'rackup'
11
zeronone

gem installer 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 sur développement et charger la gemme de manière conditionnelle.

7
rafidude

Lorsque vous exécutez l'application avec Passenger Standalone , créez simplement un fichier tmp/always_restart:

$ touch tmp/always_restart.txt

Voir Passager documentation pour plus d’informations.

6
karmi

J'aime la gemme Shotgun. Si vous utilisez une application modulaire Sinatra et disposez d'un fichier config.ru, son exécution est simple. 

shotgun config.ru

Vérifiez la gemme ici . C'est assez simple et aucune configuration n'est nécessaire. 

5
user427390

Sous Windows, j'utilise mon restart gem pour cela:

restart Ruby my_app.rb

ou, avec rackup:

restart rackup

Voir ici pour plus d’informations, espérons que vous le trouverez utile.

4
Vais Salikhov

Vous pouvez utiliser le garde-rack. Extrait 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 une 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 suit: bundle exec guard et rackup rechargera à chaque fois.

1
jeffbyrnes

Si vous ne modifiez que vos modèles, sinatra les rendra toujours si vous définissez votre environnement pour le développement:

Ruby app.rb -e development
0
three