Pregunta Enrutamiento de páginas estáticas en Sinatra (Ruby)


Puede servir archivos estáticos con Sinatra colocándolos en public/ (de forma predeterminada) - Tengo un index.html allí en este momento, pero ¿cómo puedo hacer que el punto raíz sea ese archivo sin tener que analizarlo como una plantilla?

Para ser claro, puedo acceder /index.html con éxito, y me gustaría encaminar / ser el mismo archivo estático, pero sin redirigir. ¿Alguna idea de cómo hacer esto?


12
2018-04-04 18:08


origen


Respuestas:


Probablemente llegue una mejor respuesta, hasta que esta sea mi oportunidad.

Si esto no es lo que quieres:

get '/' do
  redirect '/index.html'
end

Puede hacer algo como esto:

get '/' do
  File.new('public/index.html').readlines
end

Sin embargo, me quedaría con el primero. No estoy seguro de por qué quieres evitar esa redirección.


18
2018-04-04 18:16



Solo establece enable :static dentro de tu clase de aplicación. Al igual que:

class App < Sinatra::Base
  # Set the app root; this is where the 'public' and 'views'
  # directories are found (by default).
  set :root, File.expand_path("#{File.dirname(__FILE__)}/../app")

  # Allow the app to serve static files from the 'public' directory in :root
  enable :static
end

6
2017-10-01 06:55



require 'sinatra'

get '/' do
  send_file File.join(settings.public_folder, 'index.html')
end

Como se describe en Sirviendo archivos estáticos con Sinatra


4
2017-07-15 12:54



utilizando pasajero esto parece funcionar nada más sacarlo de la caja. tener un archivo index.html en el directorio público y ningún enrutamiento abre el index.html al acceder a la url raíz.


3
2018-04-04 19:32



Creo que esto es solo un problema porque Sinatra / Rack no tiene el concepto de un archivo predeterminado para servir si solo vas a /. En un servidor web como Apache o Nginx, esto se soluciona por usted y generalmente se predetermina a index.html index.htm (si existe, se publicará cuando vaya a un directorio sin un nombre de archivo real al final).

Cuando todos dicen que esto está integrado en Passenger, creo que realmente quieren decir que está integrado en Apache / Nginx. Apache / Nginx verificará si el archivo estático existe y lo servirá si lo hace, la solicitud nunca llegará a Rack, lo cual es impresionante para el rendimiento.

No me gustaría configurar un redireccionamiento a la página 404 ya que este tipo de violación a la idea de HTTP: debe haber un punto final para todo lo que el punto final debe devolver el verdadero estado de ese punto final. Lo que significa que si vas a /asdf tú querer el servidor web para informar un 404 porque eso es lo que realmente está sucediendo. Si realiza un redireccionamiento, ahora su sitio dice "Solía ​​tener algo aquí, pero se movió" y luego la página a la que lo redirecciona, a pesar de que dice 404 en el texto de la página, en realidad lo informa la web. server as a 200, que significa "¡todo está bien en esta página!"


3
2018-02-11 17:50



Hay una gema "sinatra-index" para resolver este problema.

https://github.com/elitheeli/sinatra-index


2
2017-07-06 23:35