2016-03-20 4 views
0

Итак, я пытаюсь создать простые приложения PaaS для Node (http://www.github.com/darrensmith/baseplatform), и я получаю действительно странное поведение.Как запустить несколько экземпляров Swaggerize на одном хосте?

В принципе - вы можете запустить BasePlatform на своем хосте, и он запускает прокси-сервер на порту 8080 с использованием http-proxy и экземпляр Swaggerize-express на порту 8180. Первоначально он проксирует все запросы на порт 8080 до 8180, который API для установки новых приложений.

Вы можете загрузить приложение и указать доменное имя с DNS, указывающим на тот же хост (localhost для целей тестирования), и на основе этого домена он будет запрашивать прокси-сервер через приложение, работающее на альтернативном порту ,

Итак, я создал второе приложение swaggerize-express и загрузил его в BasePlatform, работающий на порту 8005. Однако, когда я пытаюсь просмотреть JSON Swagger, который автоматически генерируется (http://localhost:8005/api/v1/api-docs) для приложения, работающего на порту 8005, я получаю JSON для приложения по умолчанию, работающего на порту 8180.

Если я запускаю приложение самостоятельно и удаляю порт 8005, я получаю правильный JSON.

Я не понимаю, как процесс узла, запущенный на одном из портов моего хоста, мешает процессу узла работать на другом, и я ищу некоторое представление.

Примечание. Это я пытаюсь запустить json установленного приложения прямо на порт, на котором он был запущен. Если я попытаюсь просмотреть его на порту 8080 (через прокси), я получаю такое же поведение. Мои статические маршруты, которые не обрабатываются автоматически Swaggerize, работают так, как ожидалось, только кросс-перекресток между маршрутами, обрабатываемыми с помощью swaggerize.

Любая помощь была бы принята с благодарностью!

ответ

0

Понял это!

Я неявно покинул текущий рабочий каталог, как и у родительского процесса (BasePlatform) при запуске дочернего процесса:

const fork = require('child_process').fork; 
app.locals.settings.deployedProcesses[oldAppId+'-'+latestDeployId] = fork('./deployments/'+oldAppId+'-'+latestDeployId+'/server.js'); 

При этом в Swaggerize маршрутизатор дочернего процесса был подбирая swagger.yaml файл родительского процесса (потому что он застрял в текущем рабочем каталоге родителя) вместо его собственного.

я пересмотрел его, чтобы установить текущую рабочую директорию, что дочерний процесс:

const fork = require('child_process').fork; 
app.locals.settings.deployedProcesses[oldAppId+'-'+latestDeployId] = fork('server.js',[],{ 
    cwd: './deployments/'+oldAppId+'-'+latestDeployId 
});