estoy usando
# my_app.rb
load 'index.rb'
y comienza el servidor así
ruby my_app.rb
pero nunca recarga los cambios que hice en la página de índice.
¿Me perdí algo aquí?
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 decirrerun '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'
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
yafter_reload
- https://github.com/sinatra/sinatra/pull/1150fuente
require "./my-file"
sin éxitorequire
no recarga el archivo, si ya era necesario. Tu enload
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 guardarlosever.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
Puedes usar la
rerun
gema.O si está usando rackup
fuente
gema instalar sinatra-reloader
Es posible que desee establecer la variable de entorno en desarrollo y cargar condicionalmente la gema.
fuente
Cuando ejecute la aplicación con Passenger Standalone , simplemente cree un
tmp/always_restart
archivo:Consulte la documentación del pasajero para obtener más información.
fuente
Me gusta la joya Shotgun. Si está usando una aplicación modular Sinatra y tiene un archivo config.ru, es fácil de ejecutar.
Mira la joya aquí . Es bastante sencillo y no se necesita configuración.
fuente
En Windows, estoy usando mi gema de reinicio para esto:
o, con rackup:
Consulte aquí para obtener más información, espero que lo encuentre útil.
fuente
Podrías usar guard-rack. Extraído de un artículo en dblock.org :
Agregue esto a su Gemfile:
Luego, crea un
Guardfile
en la raíz de tu proyecto con este contenido:Por último, ejecute Guard, así:
bundle exec guard
yrackup
se recargará cada vez.fuente
Si solo cambia sus plantillas, sinatra siempre las volverá a generar si configura su entorno para el desarrollo:
fuente