40 votes

Comment servir des fichiers statiques via Rack?

Je développe actuellement une application basée sur Rack et je souhaite rediriger toutes les demandes de fichiers (par exemple, nomfichier.filetype) vers un dossier spécifié.

Rack :: Static ne prend en charge que les demandes de fichiers pour un dossier spécial (par exemple, "/ media").

Dois-je écrire un propre middleware Rack ou existe-t-il une solution prête à l'emploi?

Meilleures salutations

40voto

molf Points 34978

Pour rediriger toutes les demandes à un chemin particulier, utilisez Rack::File (pour certaines raisons, cette classe est absente dans les documents récents, mais il est encore une partie de la dernière Rack):

run Rack::File.new("/my/path")

Pour rediriger chaque demande, et ajouter un index HTML de tous les fichiers de la cible dir, utilisez Rack::Directory:

run Rack::Directory.new("/my/path")

Pour combiner plusieurs répertoires ou seulement une des demandes de la cible dir:

map "/url/prefix" do
  run Rack::File.new("/my/path")
end

# More calls to map if necessary...

# All other requests.
run MyApp.new

12voto

Une mise à jour, la dernière implémentation de Rack vous permet d’utiliser Rack :: Static

Exemple:

 use Rack::Static, :urls => ["/media"]
 

Servira toutes les ressources statiques en ./media dossier par rapport à config.ru emplacement.

11voto

kejadlen Points 776

Vous pourrez peut-être utiliser Rack::File directement. Voici un fichier config.ru que vous pouvez brancher en rack pour le voir fonctionner:

 app = proc do |env|
  Rack::File.new('foo/bar').call(env)
end

run app
 

2voto

Diego Carrion Points 104
run Rack::Directory.new(Dir.pwd)

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