Tengo un sitio web de una sola página que usa HTML, CSS y JavaScript. Quiero implementar la aplicación en Heroku, pero no puedo encontrar la manera de hacerlo. Ahora estoy tratando de hacer que la aplicación funcione con Sinatra.
.
|-- application.css
|-- application.js
|-- index.html
|-- jquery.js
`-- myapp.rb
Y el siguiente es el contenido de myapp.rb.
require 'rubygems'
require 'sinatra'
get "/" do
# What should I write here to point to the `index.html`
end

require 'webrick'; server = WEBrick::HTTPServer.new Port: 1234; server.mount '/', WEBrick::HTTPServlet::FileHandler, 'www/'; trap("INT") { server.stop }; server.start;Entonces correruby myapp.rb. Retire el puerto para Heroku. Ponerweb: ruby myapp.rben tuProcfile. El comentario no responde, ya que no es para Sinatra, pero creo que simplifica las dependencias.Respuestas:
Sin ninguna configuración adicional, Sinatra servirá activos en
public. Para la ruta vacía, querrás representar el documento de índice.Las rutas deben devolver un
Stringque se convierta en el cuerpo de respuesta HTTP.File.readabre un archivo, lee el archivo, cierra el archivo y devuelve aString.fuente
send_file File.expand_path('index.html', settings.public).settings.publicconsettings.public_folderpara obtenersend_file File.expand_path('index.html', settings.public_folder)send_file, hace cosas adicionales para ti github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L351File.readlee todo el archivo en la memoria. Esto puede estar bien o no, dependiendo del tamaño de los archivos y el número de solicitudes concurrentes.Puede usar el
send_fileayudante para servir archivos.Esto servirá
index.htmldesde cualquier directorio que haya sido configurado como teniendo los archivos estáticos de su aplicación.fuente
set :public_folder, por lo que usarías ensettings.public_folderlugar desettings.publicPodrías alojarlos desde la carpeta pública y no necesitan rutas.
En el myapp.rb
Enlace a alguna subcarpeta en público
Se puede acceder a todo en ./public desde '/whatever/bla.html
Ejemplo:
./public/stylesheets/screen.css
Se podrá acceder a través de '/stylesheets/screen.css' sin necesidad de ruta
fuente
set :public_folder, 'public'. Eso fue clave para que funcione, a pesar de la documentación de Sinatra que implica que esto ya estaba configurado como predeterminado.Tenga en cuenta que en producción puede hacer que su servidor web se envíe
index.htmlautomáticamente para que la solicitud nunca llegue a Sinatra. Esto es mejor para el rendimiento, ya que no tiene que pasar por la pila de Sinatra / Rack solo para servir texto estático, que es lo que Apache / Nginx es increíble para hacer.fuente
Sinatra debería permitirle servir archivos estáticos desde el directorio público como se explica en los documentos :
fuente
Agregue la siguiente línea en el archivo rb principal
fuente
la gema sinatra-assetpack ofrece un montón de características. la sintaxis es dulce:
Si bien sigo teniendo problemas con la canalización de activos de rails, siento que tengo mucho más control usando sinatra-assetpack , pero la mayoría de las veces solo funciona con unas pocas líneas de código.
fuente
RESPUESTA ACTUALIZADA : empaté todo lo anterior sin suerte de poder cargar css, js .... etc. contenido, lo único que se estaba cargando es index.html ... y el resto iban = >>
404 errorMi solución: la carpeta de la aplicación se ve así.
index.rb== >> El código de Sinatra va.public folder== >> contiene todo lo demás ... css, js, bla, bla, etc.Ahora inicie el servidor y podrá navegar a través de páginas estáticas sin problemas.
fuente
fuente
http://sinatrarb.com/configuration.html#static---enabledisable-static-file-routes
Esta sería la forma correcta de hacerlo.
Utilicé la configuración estática porque su configuración puede afectar el uso de public_folder.
fuente
Puede considerar mover el
index.htmlarchivoviews/index.erby definir un punto final como:fuente
Siempre puedes usar Rack :: Static
https://www.rubydoc.info/gems/rack/Rack/Static
Simplemente agregue esta línea antes del comando 'ejecutar' en 'config.ru'
fuente
Poner archivos en la
publiccarpeta tiene una limitación. En realidad, cuando está en la'/'ruta raíz funciona correctamente porque el navegador establecerá la ruta relativa de su archivo css, por ejemplo,/css/style.cssy sinatra buscará el archivo en elpublicdirectorio. Sin embargo, si su ubicación es, por ejemplo/user/create, el navegador web buscará su archivo CSS/user/create/css/style.cssy fallará.Como solución alternativa, agregué la siguiente redirección para cargar correctamente el archivo CSS:
fuente
¿Qué hay de esta solución? :
así que si ahora navega a (por ejemplo) / subdirectory / test / se cargará subdirectory / test / index.html
fuente