Comment servir les fichiers statiques via rack?
Question
Je développe actuellement une application basée sur rack et que vous souhaitez rediriger toutes les requêtes de fichiers (par exemple.) De filename.filetype dans un dossier spécifié.
rack :: statique ne supporte que les demandes de fichiers pour un dossier spécial (par exemple. "/ Media").
Dois-je écrire un propre middleware Rack ou une solution ne hors-the-box existe?
Cordialement
La solution
Pour rediriger toutes les requêtes à un chemin particulier, utilisez Rack::File
( pour une raison quelconque cette classe est absente dans la documentation récente, mais il est encore une partie de le dernier rack):
run Rack::File.new("/my/path")
Pour rediriger toutes les requêtes, et ajouter un index HTML de tous les fichiers dans le répertoire cible, utilisez Rack::Directory
:
run Rack::Directory.new("/my/path")
Pour combiner plusieurs répertoires ou servir seulement 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
Autres conseils
Une mise à jour, la dernière mise en œuvre du rack permet d'utiliser rack :: statique
Exemple:
use Rack::Static, :urls => ["/media"]
Servira toutes les ressources statiques sous le dossier ./media
par rapport à config.ru
emplacement.
Vous pourriez être en mesure d'utiliser directement Rack::File
. Voici un fichier config.ru
vous pouvez brancher sur rackup pour voir fonctionner:
app = proc do |env|
Rack::File.new('foo/bar').call(env)
end
run app
run Rack::Directory.new(Dir.pwd)