Подтвердить что ты не робот

Служить статические активы и средства массовой информации отдельно от метеора с nginx?

Начиная с Django, я привык обслуживать свои статические активы и мультимедиа (включая закачки) отдельно от основного wsgi или другого приложения. Эта плоская файловая структура легко ориентируется и управляется.

Я не могу найти примеров того, как это сделать (обслуживать статические активы/носители отдельно) с помощью Meteor.

  • Существует ли стандартный подход?

  • Существуют ли пакеты, которые предоставляют эту функцию?

Мои конечные цели:

  • чтобы иметь возможность более интуитивно перемещать все статические активы и носители и получать доступ к ним из общедоступного URL-адреса без необходимости горячей перестройки приложения метеоров. "Публичная" папка не делает этого для меня... особенно для загруженных медиа.

  • Загрузите на этот системный путь (который отдельно от основного приложения метеоров) либо вручную, когда вы переносите приложение, либо через пользовательское приложение/пакет, который я пишу.

  • просматривать/анализировать путь из приложения/пакета meteor

4b9b3361

Ответ 1

Если все ваши статические активы имеют общий путь, например /static/..., то вы можете сообщить nginx > alias запрос на этот путь с помощью каталог

location /static  {
    alias /path/to/static/assets;
}

Ответ 2

Вы можете настроить файловый сервер в своем приложении 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());
    });
  });
}

Ответ 3

Если вы захотите этого по соображениям производительности и масштабируемости (см. мой комментарий), вы должны пойти с помощью кэширующего прокси. Первоначально прокси будет получать статический файл из приложения Meteor напрямую, но последующие запросы будут отправлены из его кеша.

Эта статья (nginx-caching) хорошо читается о том, как настроить кэширующий прокси с Nginx в целом. Кроме того, в Meteorpedia есть статья в которой объясняется, как настроить кеш Nginx, специально предназначенный для приложения Meteor.

Ответ 4

Скажем, ваше приложение meteor находится в /www/meteor, и вы хотите обслуживать статические ресурсы из каталога, который находится за пределами дерева /meteor, так что файл добавляет/изменяет/удаляет, не вызывает перезапуск приложения, например /www/static

Итак, сначала определите свой путь Метеор в nginx, затем определите другой корень для статического пути, например:

location /static {
  root /www/static;
}

документация