Respuestas:
Consulte las preguntas frecuentes de Sinatra ,
"¿Cómo hago para que mi aplicación Sinatra se vuelva a cargar con los cambios?"
En primer lugar, la recarga de código en proceso en Ruby es difícil y tener una solución que funcione para cada escenario es técnicamente imposible.
Es por eso que le recomendamos que realice una recarga fuera del proceso.
Primero debe instalar rerun si aún no lo ha hecho:
$ gem install rerun
Ahora, si inicia su aplicación Sinatra así:
$ ruby app.rb
Todo lo que tienes que hacer para recargar es hacer esto:
$ rerun 'ruby app.rb'
Si, por ejemplo, está utilizando rackup, haga lo siguiente:
$ rerun 'rackup'
Entiendes la idea.
Si aún desea recargar en proceso, consulte
Sinatra::Reloader
.
rerun
. No está limitado con las opciones predeterminadas, es decir rerun 'rackup'
. Es posible ejecutar cualquier servidor en cualquier puerto. Aquí hay un ejemplo de cómo ejecutar Puma en el puerto número 5678rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gema instalar sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Nota : solo recargará los controladores de sinatra (y, tal vez, algunos comandos de configuración del servidor de sinatra), pero no los archivos personalizados, que debe recargar manualmente.
UPD después de 9 años: parece que ya es posible recargar otros archivos usando also_reload
, dont_reload
y after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
sin éxito
require
no recarga el archivo, si ya era necesario. Tu en load
cambio.
server.rb
embargo, tengo que volver a guardar mi para que vuelva a cargar mi archivo externo. No comprueba mi archivo externo solo, por lo que tengo que volver a guardarlo sever.rb
cada vez que hago un cambio en mi archivo externo. shotgun parece funcionar mejor en este sentido, pero también parece volver a cargar las sesiones de la base de datos.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Cuando ejecute la aplicación con Passenger Standalone , simplemente cree un tmp/always_restart
archivo:
$ touch tmp/always_restart.txt
Consulte la documentación del pasajero para obtener más información.
Me gusta la joya Shotgun. Si está usando una aplicación modular Sinatra y tiene un archivo config.ru, es fácil de ejecutar.
shotgun config.ru
Mira la joya aquí . Es bastante sencillo y no se necesita configuración.
En Windows, estoy usando mi gema de reinicio para esto:
restart ruby my_app.rb
o, con rackup:
restart rackup
Consulte aquí para obtener más información, espero que lo encuentre útil.
Podrías usar guard-rack. Extraído de un artículo en dblock.org :
Agregue esto a su Gemfile:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Luego, crea un Guardfile
en la raíz de tu proyecto con este contenido:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Por último, ejecute Guard, así: bundle exec guard
y rackup
se recargará cada vez.