Venant de Django, je suis habitué à servir mes ressources et supports statiques (y compris les téléchargements) séparément du wsgi principal ou de toute autre application. Cette structure de fichier plat est facile à naviguer et à gérer.
Je ne peux pas sembler trouver des exemples de la façon de le faire (servir des actifs statiques / médias séparément) avec Meteor.
Existe-t-il une approche standard?
Existe-t-il des packages fournissant cette fonctionnalité?
Mes objectives sont les suivants:
pour pouvoir naviguer de manière plus intuitive dans toutes les ressources et tous les supports statiques et y accéder depuis une URL accessible au public sans avoir à reconstruire à chaud l’application meteor. Le dossier “public” ne le fait pas pour moi … surtout pour les médias téléchargés.
télécharger sur ce chemin système (qui est distinct de l’application meteor principale) soit manuellement lors de la migration d’une application ou via une application / package personnalisée que j’écris.
parcourir / parsingr le chemin de l’application / package meteor
Si tous vos actifs statiques ont un chemin commun, par exemple /static/...
, vous pouvez indiquer à nginx
des alias
requêtes sur ce chemin avec un répertoire
location /static { alias /path/to/static/assets; }
Vous pouvez configurer un serveur de fichiers dans votre application meteor pour les servir en utilisant le module node fs
puis servir en utilisant quelque chose comme Picker ou vous pouvez append un gestionnaire de connexion à Meteor ici si cela ne fonctionne pas.
Meteor ignorera les répertoires masqués par défaut afin que vous puissiez placer les éléments dans votre répertoire d’application si vous voulez quelque chose comme .assets/
, sinon n’importe où sur le système de fichiers auquel l’utilisateur exécutant meteor peut accéder.
Voici un serveur de travail pour les fichiers texte que je viens de rassembler. Vous devrez faire des meteor add meteorhacks:picker
premier:
if (Meteor.isServer) { var fs = Npm.require('fs'); Picker.route('/asset/:name', function(params, req, res) { fs.readFile('/home/users/someuser/media/' + params.name, function(err, file) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(file.toSsortingng()); }); }); }
Si vous le souhaitez pour des raisons de performances et d’évolutivité (voir mon commentaire), vous devez utiliser un proxy Caching. Initialement, le proxy récupérera directement un fichier statique de l’application Meteor, mais les requêtes suivantes seront envoyées depuis son cache.
Cet article ( nginx-caching ) explique comment configurer un proxy de mise en cache avec Nginx en général. Meteorpedia a également publié un article expliquant comment configurer un cache Nginx spécialement conçu pour une application Meteor.
Disons que votre application de meteor est à /www/meteor
et que vous voulez servir des ressources statiques à partir d’un répertoire situé en dehors de l’arborescence /meteor
pour que les ajouts / modifications / suppressions de fichiers ne provoquent pas le redémarrage de l’application, par exemple /www/static
Donc, commencez par définir votre chemin Meteor dans nginx normalement, puis définissez une racine différente pour le chemin statique, ex:
location /static { root /www/static; }
Documentation