Почему не работает перенос моего локально созданного MEAN-приложения в OpenShift?

Я пытаюсь отправить свое MEAN-приложение, которое я создал локально с помощью Express, в OpenShift. Для этого я создаю новое приложение из панели управления и добавляю NodeJS в качестве картриджа. Когда я затем добавляю свой Git-Repository-URL (размещенный на BitBucket) и создаю приложение, я получаю следующую ошибку:

Ошибка панели управления Openshift

Когда я создаю новое приложение, не вводя URL-адрес репозитория, а затем извлекаю из Openshift, копирую в свой проект и снова нажимаю, я получаю аналогичную ошибку:

Ошибка Git-Push

Кажется, это какая-то проблема с недоступным портом 8080, но я не могу решить эту проблему самостоятельно, так как я новичок в этом и не смог найти решение в Интернете, поэтому любая помощь и совет приветствуются.

РЕДАКТИРОВАТЬ: когда я говорю ЗНАЧИТ, я на самом деле имею в виду EAN; В данный момент я не использую MongoDB.

РЕДАКТИРОВАТЬ 2: через несколько часов я решил попробовать Heroku. Это также не сработало с первой попытки, но журнал содержал гораздо больше полезной информации, поэтому я все установил и запустил примерно за час (по сравнению с 4 часами попыток с OpenShift). После этого я попытался отправить тот же самый проект, который я отправил в Heroku, в Openshift, и получил следующую новую ошибку:

Новый журнал ошибок Openshift

Опять же, если кто-то знает быстрое решение этой проблемы, сообщите мне, так как я все еще хотел бы использовать OpenShift.


person Claas M.    schedule 15.08.2015    source источник
comment
Сообщение об ошибке говорит, что порт 8080 недоступен. В вашей конфигурации жестко запрограммирован порт 8080 или вы используете значение OPENSHIFT_NODEJS_PORT, как и предполагалось?   -  person Mark B    schedule 15.08.2015
comment
Где найти конфигурацию? Будет ли он по-прежнему работать локально, когда я его изменю, и, если нет, как я могу добиться этого, не меняя его каждый раз, когда я хочу развернуть?   -  person Claas M.    schedule 15.08.2015


Ответы (2)


Ваш код NodeJS должен выглядеть примерно так:

var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
http.createServer().listen(port);

Это будет использовать значение OPENSHIFT_NODEJS_PORT, если оно доступно, и по-прежнему использовать 8080, когда вы запускаете приложение вне OpenShift. Или вы можете даже установить переменную среды OPENSHIFT_NODEJS_PORT=8080 на вашем локальном компьютере, чтобы более точно имитировать среду OpenShift.

Обратите внимание, что вы также должны проверить переменные среды, чтобы получить правильный IP-адрес сервера. Дополнительные сведения см. в этой документации.

person Mark B    schedule 15.08.2015
comment
Файл www был создан Express, который установил порт normalizePort(process.env.PORT || '3000');. Я изменил это на app.set('port', process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || 3000); app.set('ip', process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"); Но ошибка не изменилась. - person Claas M.; 15.08.2015
comment
Похоже, у вас уже может быть запущена версия вашего приложения, которая по какой-то причине не закрывается. Вы можете попробовать перезапустить приложение, чтобы увидеть, устранит ли это проблему. Инструкции по перезапуску находятся здесь: help. openshift.com/hc/en-us/articles/ - person Mark B; 15.08.2015
comment
Я пробовал это, но это не было причиной. пожалуйста, смотрите мой обновленный вопрос - person Claas M.; 16.08.2015
comment
Я думаю, вам нужно подключиться к серверу по SSH и просмотреть журналы в app-root/logs/nodejs.log, чтобы увидеть, что на самом деле происходит. - person Mark B; 17.08.2015

Что сработало для меня, так это следующее:

  1. Создайте приложение на OpenSHift, пока оставьте URL-адрес репо пустым.
  2. Используйте git remote add openshift -f <openshift-git-repo-url (ssh://...something)>, чтобы добавить Openshift-Repo в качестве удаленного репозитория в ваш проект.
  3. Используйте git merge openshift/master -s recursive -X ours, чтобы объединить Openshift-Repo с вашим локальным репозиторием и сохранить ваши файлы в случае возникновения конфликтов.
  4. (И это важный шаг) Ваш основной файл (для меня bin/www) должен выглядеть примерно так (я пробовал все, чтобы отформатировать это, но оно просто не отформатировано должным образом):

    var приложение = требуется('../приложение'); var debug = require('debug')('CTW:сервер'); var http = требуется('http');

    /**

    • Get port from environment and store in Express. */ app.set('port', process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || 3002); app.set('ip', process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1");

    /**

    • Создайте HTTP-сервер. */

    сервер вар = http.createServer (приложение);

    /**

    • Слушайте на указанном порту, на всех сетевых интерфейсах. */

    server.listen(app.get('порт'), app.get('ip'));

  5. git push openshift HEAD, чтобы отправить его в репозиторий приложений

Как оказалось, мне нужно было установить IP.

Все заслуги принадлежат этому и это ответы на вопросы.

person Claas M.    schedule 25.08.2015