143 votes

Servir des fichiers statiques avec Sinatra

J'ai un site Web d'une page utilisant uniquement HTML, CSS et JavaScript. Je veux déployer l'application sur Heroku, mais je ne trouve pas le moyen de le faire. J'essaie maintenant de faire fonctionner l'application avec Sinatra.

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

Et ce qui suit est le contenu de myapp.rb .

require 'rubygems'
require 'sinatra'

get "/" do
  # What should I write here to point to the `index.html`
end

169voto

Ryan Ahearn Points 3829

Vous pouvez utiliser le send_file pour servir les fichiers.

require 'sinatra'

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

Cela servira index.html à partir du répertoire qui a été configuré pour contenir les fichiers statiques de votre application.

133voto

Tate Johnson Points 2700

Sans configuration supplémentaire, Sinatra servira les ressources dans le dossier public . Pour la route vide, vous voudrez rendre le document d'index.

require 'rubygems'
require 'sinatra'

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

Les routes doivent renvoyer un String qui deviennent le corps de la réponse HTTP. File.read ouvre un fichier, lit le fichier, ferme le fichier et renvoie un message de type String .

64voto

Morgan Points 6578

Vous pouvez simplement les héberger à partir du dossier public et ils n'ont pas besoin de routes.

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

Dans le fichier myapp.rb

set :public_folder, 'public'

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

Lien vers un sous-dossier dans le public

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

Tout ce qui se trouve dans ./public est accessible depuis '/whatever/bla.html'.

Exemple :
./public/stylesheets/screen.css
Sera accessible via '/stylesheets/screen.css', pas de route nécessaire.

12voto

Rob Cameron Points 3456

Gardez à l'esprit qu'en production, vous pouvez demander à votre serveur web d'envoyer index.html automatiquement, de sorte que la demande ne parvienne jamais à Sinatra. C'est plus performant car vous n'avez pas besoin de passer par la pile Sinatra/Rack pour servir du texte statique, ce que Apache/Nginx savent très bien faire.

10voto

Sinatra devrait vous permettre de servir des fichiers statiques à partir du répertoire public. comme expliqué dans les docs :

Fichiers statiques

Les fichiers statiques sont servis à partir du répertoire ./public. Vous pouvez spécifier un autre emplacement en définissant l'option :public :

Notez que le nom du répertoire public n'est pas inclus dans l'URL. Un fichier ./public/css/style.css est mis à disposition sous le nom de exemple.com/css/style.css.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X