ruby sinatra

ruby - sinatra php



Sirviendo archivos estáticos con Sinatra (13)

¿Qué hay de esta solución? :

get "/subdirectory/:file" do file = params[:file] + "index.html" if File.exists?(params[:file]) return File.open("subdirectory/" + file) else return "error" end end

así que si ahora navega a (por ejemplo) / subdirectory / test / cargará subdirectory / test / index.html

Tengo un sitio web de una sola página que solo 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


Agregue la línea siguiente en el archivo principal rb

set :public_folder, ''public''


Poner archivos en public carpeta public tiene una limitación. En realidad, cuando estás en la raíz ''/'' ruta funciona correctamente porque el navegador establecerá la ruta relativa de tu archivo css, por ejemplo /css/style.css y sinatra buscará el archivo en el directorio public . Sin embargo, si su ubicación es, por ejemplo, /user/create , el navegador web buscará su archivo css en /user/create/css/style.css y fallará.

Como solución alternativa, agregué la siguiente redirección para cargar correctamente el archivo css:

get %r{.*/css/style.css} do redirect(''css/style.css'') end


Puede considerar mover el archivo index.html a views/index.erb y definir un punto final como:

get ''/'' do erb :index end


Puede usar el helper send_file para servir archivos.

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

Esto servirá a index.html desde cualquier directorio que se haya configurado con los archivos estáticos de su aplicación.


Simplemente puede alojarlos desde la carpeta pública y no necesitan rutas.

. -- myapp.rb `-- public |-- application.css |-- application.js |-- index.html `-- jquery.js

En el myapp.rb

set :public_folder, ''public'' get "/" do redirect ''/index.html'' end

Enlace a alguna subcarpeta en público

set :public_folder, ''public'' get "/" do redirect ''/subfolder/index.html'' end

Todo en ./public es accesible desde ''/whatever/bla.html

Ejemplo:
./public/stylesheets/screen.css
Se podrá acceder a través de ''/stylesheets/screen.css'' no se requiere ruta


Sin ninguna configuración adicional, Sinatra servirá activos en public . Para la ruta vacía, querrá renderizar el documento índice.

require ''rubygems'' require ''sinatra'' get ''/'' do File.read(File.join(''public'', ''index.html'')) end

Las rutas deben devolver una String que se convierta en el cuerpo de respuesta HTTP. File.read abre un archivo, lee el archivo, cierra el archivo y devuelve un String .


Sinatra debería permitirle servir archivos estáticos del directorio público como se explica en los documentos :

Archivos estáticos

Los archivos estáticos se sirven desde el directorio ./public. Puede especificar una ubicación diferente configurando la opción: public:

Tenga en cuenta que el nombre del directorio público no está incluido en la URL. Un archivo ./public/css/style.css está disponible como example.com/css/style.css.


Tenga en cuenta que en producción puede hacer que su servidor web envíe index.html automáticamente para que la solicitud nunca llegue a Sinatra. Esto es mejor para el rendimiento ya que no tiene que pasar por la pila Sinatra / Rack solo para servir texto estático, que es lo que Apache / Nginx son geniales al hacer.


la gema sinatra-assetpack ofrece un montón de características. la sintaxis es dulce:

serve ''/js'', from: ''/app/javascripts''

Mientras sigo teniendo problemas con la cartera de activos de carriles, siento que tengo mucho más control con sinatra-assetpack , pero la mayoría de las veces solo funciona con unas pocas líneas de código.



RESPUESTA ACTUALIZADA : Ataron todo lo anterior sin tener la suerte de poder cargar css, js ... etc contenidos, lo único que se estaba cargando es index.html ... y el resto fue 404 error = >> 404 error

Mi solución: la carpeta de la aplicación se ve así.

index.rb == >> El código de Sinatra va.

require ''rubygems'' require ''sinatra'' get ''/'' do html :index end def html(view) File.read(File.join(''public'', "#{view.to_s}.html")) end

public folder == >> contiene todo lo demás ... css, js, blah blah..etc.

user@user-SVE1411EGXB:~/sintra1$ ls index.rb public user@user-SVE1411EGXB:~/sintra1$ find public/ public/ public/index.html public/about_us.html public/contact.html public/fonts public/fonts/fontawesome-webfont.svg public/fonts/fontawesome-webfont.ttf public/img public/img/drink_ZIDO.jpg public/js public/js/bootstrap.min.js public/js/jquery.min.js public/js/bootstrap.js public/carsoul2.html public/css public/css/font-awesome-ie7.css public/css/bootstrap.min.css public/css/font-awesome.min.css public/css/bootstrap.css public/css/font-awesome.css public/css/style.css user@user-SVE1411EGXB:~/sintra1$

Ahora inicie el servidor y podrá navegar a través de páginas estáticas sin problemas.

user@user-SVE1411EGXB:~/sintra1$ ruby index.rb == Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Thin >> Thin web server (v1.5.1 codename Straight Razor) >> Maximum connections set to 1024 >> Listening on localhost:4567, CTRL+C to stop


require ''rubygems'' require ''sinatra'' set :public_folder, File.dirname(__FILE__) + ''/../client'' #client - it''s folder with all your file, including myapp.rb get "/" do File.read(''index.html'') end