Risposte:
Vedi le FAQ di Sinatra ,
"Come faccio a ricaricare la mia app Sinatra in caso di modifiche?"
Prima di tutto, ricaricare il codice in-process in Ruby è difficile e avere una soluzione che funzioni per ogni scenario è tecnicamente impossibile.
Questo è il motivo per cui ti consigliamo di eseguire il ricaricamento fuori processo.
Per prima cosa è necessario installare rieseguire se non lo hai già fatto:
$ gem install rerun
Ora se avvii la tua app Sinatra in questo modo:
$ ruby app.rb
Tutto quello che devi fare per ricaricare è invece fare questo:
$ rerun 'ruby app.rb'
Se ad esempio stai usando rackup, procedi come segue:
$ rerun 'rackup'
Hai l'idea.
Se vuoi ancora ricaricare in-process, controlla
Sinatra::Reloader
.
rerun
. Non sei limitato con le opzioni predefinite, ad es rerun 'rackup'
. È possibile eseguire qualsiasi server su qualsiasi porta. Ecco un esempio di come eseguire Puma sulla porta numero 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem installa sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Nota : ricaricherà solo i gestori di sinatra (e, forse, alcuni comandi di configurazione del server sinatra), ma non i file personalizzati, che devi ricaricare manualmente.
UPD dopo 9 anni: sembra che sia già possibile ricaricare altri file usando also_reload
, dont_reload
e after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
senza successo
require
non ricarica il file, se era già richiesto. Tu load
invece.
server.rb
, però, per farlo ricaricare il mio file esterno. Non controlla solo il mio file esterno, quindi devo salvarlo nuovamente sever.rb
ogni volta che apporto una modifica al mio file esterno. shotgun sembra funzionare meglio in questo senso, ma sembra anche ricaricare le sessioni del database.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Quando esegui l'applicazione con Passenger Standalone , crea semplicemente un tmp/always_restart
file:
$ touch tmp/always_restart.txt
Consulta la documentazione del passeggero per maggiori informazioni.
Mi piace la gemma del fucile a pompa. Se stai utilizzando un'app Sinatra modulare e hai un file config.ru, è facile da eseguire.
shotgun config.ru
Controlla la gemma qui . È abbastanza semplice e non è necessaria alcuna configurazione.
Su Windows, sto usando la mia gemma di riavvio per questo:
restart ruby my_app.rb
oppure, con rackup:
restart rackup
Vedi qui per maggiori informazioni, spero che lo trovi utile.
Potresti usare guard-rack. Estratto da un articolo su dblock.org :
Aggiungi questo al tuo Gemfile:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Quindi, crea un Guardfile
alla radice del tuo progetto con questo contenuto:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Infine, esegui Guard, in questo modo: bundle exec guard
e rackup
ricaricherai ogni volta.