2009-08-07 15 views

risposta

184

Vedere il Sinatra FAQ,

"How do I make my Sinatra app reload on changes?"

Innanzitutto, in-process codice ricarico in Ruby è duro e avente una soluzione che funziona per ogni scenario è tecnicamente impossibile.

Ecco perché ti consigliamo di eseguire il ricaricamento out-of-process.

In primo luogo è necessario installare rerun se non l'hai già:

$ gem install rerun 

Ora, se si avvia il Sinatra app come questo:

$ ruby app.rb 

Tutto quello che dovete fare per il ricaricamento è invece A questo scopo:

$ rerun 'ruby app.rb' 

Se si utilizza ad esempio rackup, fare invece il seguente:

$ rieseguire 'rackup'

si ottiene l'idea.

Se si desidera eseguire ancora il caricamento in corso, consultare Sinatra::Reloader.

+0

Impressionante! Grazie: D – jocap

+3

Shotgun non funziona con Windows, anche se il fucile a pompa –

+0

richiede un minimo config.ru. Se non ne hai già uno, crealo e metti "require" ./my_app '"(dove my_app.rb è la tua app ruby) al suo interno e verrai impostato. –

40

gem install Sinatra-ricaricatore

require 'sinatra' 
require 'sinatra/reloader' 

Nota: si ricaricherà solo i gestori Sinatra (e, forse alcuni comandi di configurazione del server Sinatra), ma i file non personalizzati, che si devo ricaricare manualmente.

+0

Hey @Nakilon, come farei per ricaricare manualmente questi file? Sto facendo 'require" ./my-file "' senza successo – kristianlm

+0

@kristianlm, 'require' non ricarica il file, se già era necessario. Si "carica" ​​invece. – Nakilon

+0

hai ragione. Devo ri-salvare il mio 'server.rb', però, per farlo ricaricare il mio file esterno. Non controlla da solo il mio file esterno, quindi devo ri-salvare il mio 'sever.rb' ogni volta che apporto una modifica al mio file esterno. [shotgun] (http://rubygems.org/gems/shotgun) sembra funzionare meglio a questo proposito, ma sembra anche ricaricare le sessioni del database. – kristianlm

6

gem install Sinatra-ricaricatore

require 'sinatra/base' 
require "sinatra/reloader" 

class MyApp < Sinatra::Base 
    register Sinatra::Reloader 

    get '/' do 
    "Hello Testing1!" 
    end 
end 

Si consiglia di impostare la variabile ambiente per lo sviluppo e la condizionale caricare la gemma.

6

Quando si esegue l'applicazione con Passenger Standalone, basta creare un file tmp/always_restart:

$ touch tmp/always_restart.txt 

See passeggeri documentation per maggiori informazioni.

+0

Sei un dio d'oro! Grazie. –

11

È possibile utilizzare la gemma rerun.

gem install rerun 
rerun 'ruby app.rb' 

O se si utilizza rackup

rerun 'rackup' 
1

Si potrebbe usare guard-rack. Sollevato da un article at dblock.org:

Aggiungi questo al vostro Gemfile:

group :development do 
    gem "guard" 
    gem "guard-bundler" 
    gem "guard-rack" 
end 

Poi, creare un Guardfile alla radice del vostro progetto con questo contenuto:

guard 'bundler' do 
    watch('Gemfile') 
end 

guard 'rack' do 
    watch('Gemfile.lock') 
    watch(%r{^(config|app|api)/.*}) 
end 

Infine, eseguire Guardia in questo modo: bundle exec guard e rackup verranno ricaricati ogni volta.

4

Su Windows, Sto usando il mio restart gem per questo:

restart ruby my_app.rb 

o, con rackup:

restart rackup 

Vedi here per ulteriori informazioni, spero vi sia utile.

+0

la documentazione afferma che non funziona su Windows, ho provato e carica sinatra ma non ricarica su chenges – peter

5

Mi piace la gemma Shotgun. Se stai usando un'app di Sinatra modulare e disponi di un file config.ru, è facile da eseguire.

shotgun config.ru 

Controllare la gemma here. È abbastanza semplice e non è necessaria alcuna configurazione.

0

Se si modifica solo i modelli Sinatra sarà sempre rerender loro se si imposta l'ambiente per lo sviluppo:

ruby app.rb -e development 
Problemi correlati