2014-12-02 3 views
2

Из-за определенных ограничений мне нужно разместить мое приложение из подкаталога (например, hostname.domain.com/mysailsapp). Веб-сервер - nginx и настроен на прокси-соединения с парусами/узлами.Хостинг sails.js приложение из подкаталога

Проблема, с которой я сталкиваюсь, заключается в том, что grunt автоматически создает ссылки, чтобы включить frontend javascript/css/images/etc, но все приложения Sails ожидаются на уровне корня.

Все работает нормально, когда я подключаюсь непосредственно к парусам через порт 1337, поскольку паруса находятся в корне, но при подключении через URL-адрес подкаталога, проксированного к парусам, это не сработает.

Я не видел простой способ настроить паруса для изменения этого поведения и не хотел вручную обновлять путь сборки grunt.

Возможно, мне не хватает чего-то другого, но я хотел бы открыть это на SO, чтобы узнать, есть ли другой способ, или если я должен открыть проблему для парусов, чтобы включить такой параметр конфигурации.

Edit: Доступ через http://host.domain.com:1337/, источник HTML содержит ссылки, как это:

<!--STYLES--> <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.css"> <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap-theme.css"> <link rel="stylesheet" href="/bower_components/font-awesome/css/font-awesome.css"> <!--STYLES END-->

Эти ссылки работают хорошо, так как вы можете получать доступ принимал от парусов/узла. http://host.domain.com:1337/bower_components/bootstrap/dist/css/bootstrap.css - Возвращает 200

хостинг парусов приложение от Nginx прокси, http://host1.domain.com/mysailsapp/, парусов/Nginx вернуть этот HTML в браузере:

<!--STYLES--> <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.css"> <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap-theme.css"> <link rel="stylesheet" href="/bower_components/font-awesome/css/font-awesome.css"> <!--STYLES END-->

Затем браузер пытается загрузить статические активы с помощью : http://host1.domain.com/bower_components/bootstrap/dist/css/bootstrap.css

Эта ссылка не будет работать, так как браузер пытается загрузить статические ресурсы вне подкаталога.

ответ

0

Вы можете настроить nginx для обслуживания статического содержимого с этого URL-адреса.

location /mysailsapp/ { 
    alias /path/to/your/app/assets/; 
} 
+1

Проблема заключается не в создании пути к каталогу ресурсов в nginx, а в виде парусов через grunt будет динамически вводить URL-адреса для загрузки файлов активов в HTML. Эти URL-ссылки не имеют пути к подкаталогу, поэтому браузер пытается загрузить их через http://host.domain.com/js/javascript.js. Я отредактирую свою оригинальную проблему с дополнительной информацией. – user3590543

0

Prorper способ сделать это Hidding в официальных документах для парусов хрюкать активы-линкер плагин: https://github.com/Zolmeister/grunt-sails-linker где вы должны использовать абсолютный путь, но это, кажется, не работает. Таким образом, вы можете использовать небольшой взлом.

Trick бы поставить вар, который представляет ваше имя поддиректории внутри задач/linkAssets.js как в примере:

var subdirectory='/dashboard'; 

module.exports = function(grunt) { 

    grunt.config.set('sails-linker', { 
     devJs: { 
      options: { 
       startTag: '<!--SCRIPTS-->', 
       endTag: '<!--SCRIPTS END-->', 
       fileTmpl: '<script src="'+prefix+'%s"></script>', 
       appRoot: '.tmp/public' 
      }, 
      files: { 
       '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject, 
       'views/**/*.html': require('../pipeline').jsFilesToInject, 
       'views/**/*.ejs': require('../pipeline').jsFilesToInject 
      } 
     }, 

     devJsRelative: { 
      options: { 
       startTag: '<!--SCRIPTS-->', 
       endTag: '<!--SCRIPTS END-->', 
       fileTmpl: '<script src="'+prefix+'%s"></script>', 
       appRoot: '.tmp/public', 
       relative: true 
      }, 
      files: { 
       '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject, 
       'views/**/*.html': require('../pipeline').jsFilesToInject, 
       'views/**/*.ejs': require('../pipeline').jsFilesToInject 
      } 
     }, 

и так далее, я надеюсь, что вы получите точку.

0

Паруса (по крайней мере, версия, в которой я использую: 0.11) включает в себя задачи, которые связывают активы с параметром «относительный» грунта-паруса-линка, установленным в «true», что позволяет избежать установки начального «/» в URL актива. Названия этих задач имеют суффикс «Относительный», чтобы отличать их от своих «стандартных» аналогов, у которых «относительный» установлен на «false».

Например, есть:

  • devStylesRelative
  • prodStylesRelative
  • devJsRelative
  • ... и так далее

Кроме того, есть псевдоним задачи, которые выполняются те " относительные версии "вместо" абсолютных ". Например. linkAssetsBuild

Вы можете найти эти задачи, зарегистрированные в tasks/config/sails-linker.js.

Решение, которое я использовал (хотя я не уверен, является ли оно наиболее стандартным или нет), меняет задачу по умолчанию для запуска linkAssetsBuild вместо linkAssets, чтобы гарантировать, что задачи, выполняемые при поднятии парусов, «относительные».

Вы можете сделать это, изменив файл tasks/register/default.js.

Смежные вопросы