Ответ 1
Если все ваши статические активы имеют общий путь, например /static/...
, то вы можете сообщить nginx
> alias
запрос на этот путь с помощью каталог
location /static {
alias /path/to/static/assets;
}
Начиная с Django, я привык обслуживать свои статические активы и мультимедиа (включая закачки) отдельно от основного wsgi или другого приложения. Эта плоская файловая структура легко ориентируется и управляется.
Я не могу найти примеров того, как это сделать (обслуживать статические активы/носители отдельно) с помощью Meteor.
Существует ли стандартный подход?
Существуют ли пакеты, которые предоставляют эту функцию?
Мои конечные цели:
чтобы иметь возможность более интуитивно перемещать все статические активы и носители и получать доступ к ним из общедоступного URL-адреса без необходимости горячей перестройки приложения метеоров. "Публичная" папка не делает этого для меня... особенно для загруженных медиа.
Загрузите на этот системный путь (который отдельно от основного приложения метеоров) либо вручную, когда вы переносите приложение, либо через пользовательское приложение/пакет, который я пишу.
просматривать/анализировать путь из приложения/пакета meteor
Если все ваши статические активы имеют общий путь, например /static/...
, то вы можете сообщить nginx
> alias
запрос на этот путь с помощью каталог
location /static {
alias /path/to/static/assets;
}
Вы можете настроить файловый сервер в своем приложении meteor, чтобы обслуживать их с помощью модуля node fs
, а затем использовать, используя Picker или там пример добавления обработчика соединения в Meteor здесь, если это не сработает.
Метеор по умолчанию игнорирует скрытые каталоги, поэтому вы можете поместить их в свой каталог приложений, если хотите что-то вроде .assets/
, иначе в любом месте файловой системы, к которой может обратиться пользователь, работающий с метеоритом.
Здесь работает сервер для текстовых файлов, которые я просто сбрасывал вместе. Сначала вам нужно сделать meteor add meteorhacks:picker
:
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.toString());
});
});
}
Если вы захотите этого по соображениям производительности и масштабируемости (см. мой комментарий), вы должны пойти с помощью кэширующего прокси. Первоначально прокси будет получать статический файл из приложения Meteor напрямую, но последующие запросы будут отправлены из его кеша.
Эта статья (nginx-caching) хорошо читается о том, как настроить кэширующий прокси с Nginx в целом. Кроме того, в Meteorpedia есть статья в которой объясняется, как настроить кеш Nginx, специально предназначенный для приложения Meteor.
Скажем, ваше приложение meteor находится в /www/meteor
, и вы хотите обслуживать статические ресурсы из каталога, который находится за пределами дерева /meteor
, так что файл добавляет/изменяет/удаляет, не вызывает перезапуск приложения, например /www/static
Итак, сначала определите свой путь Метеор в nginx, затем определите другой корень для статического пути, например:
location /static {
root /www/static;
}