2016-08-27 3 views
1

Это моя первая попытка в Heroku. Я смог «развернуть успешный» на героку, но при посещении моего приложения он говорит: «приложение не выполнено».Развертывание nodejs/mongoose to heroku

Я после этого руководства: https://scotch.io/tutorials/use-mongodb-with-a-node-application-on-heroku

Я думаю, что сложная вещь, потому что я использую Мангуст, он не может хорошо относиться с URI. Я также использую админ mlab.

Вот мои настройки для моего внутреннего интерфейса:

 var request = require('request'); 
    var app = express(); 
    var mongoCredentialss = require('/mongo_credentialss.json'); 
    var conn = mongoose.connection; 
    var path = require('path'); 

    // connect to the database 
    mongoose.connect('mongodb://' + mongoCredentials.username + ':' + mongoCredentialss.password + '@ds.mlab.com:12345/mydatabase-db'); 
    mongoose.Promise = Promise; 
app.listen(3000, function() { 
    console.log('Listening on 3000...'); 
    }); 

Я не очень понимаю .env, чтобы заставить его работать на местном уровне, я просто сохраненные имя пользователя и пароль в скрытом файле .json благодаря. gitignore. Из руководства, однако, я просто попытался включить URI прямо в мой файл узла как переменную, чтобы увидеть, работает ли это даже. Я не слишком уверен, как «скрытый» среды работы ...

Позже, когда я начал снова, я продолжал иметь повторяющиеся проблемы с Heroku не обнаруживает свои стандартные buildpacks: набор Heroku/nodejs

* *** EDIT:

Все еще видят некоторые проблемы. Я вынул свой «Монго кредитки», поэтому мой файл server.js теперь выглядит следующим образом:

var express = require('express'); 
var mongoose = require('mongoose'); 
mongoose.connect(process.env.MONGODB_URI); 

var Promise = require('bluebird'); 
var bodyParser = require('body-parser'); 
var randtoken = require('rand-token'); 
var cors = require('cors'); 
var request = require('request'); 
var app = express(); 

var conn = mongoose.connection; 
var fs = require('fs'); 
var path = require('path'); 

    app.listen(3000, function() { 
     console.log('Our app is running on http://localhost:' + 3000); 
    }); 

Некоторые далее контекст: У меня есть один основной папки проекта, в котором находится 2 вложенные папки: бэкенд и внешний интерфейс. Когда я развертываю его в heroku, я меняю каталог в основную папку, чтобы развернуть все.

Кроме того, если это поможет, вот что мой package.json выглядит следующим образом:

"dependencies": { 
    "bluebird": "^3.4.1", 
    "body-parser": "^1.15.2", 
    "cors": "^2.7.1", 
    "express": "^4.14.0", 
    "mongoose": "^4.5.3", 
    "my-bcrypt": "^1.0.2", 
    "rand-token": "^0.2.1", 
    "request": "^2.74.0" 
    }, 
    "engines": { 
    "node": "==6.0.0" 
    } 
} 

****** EDIT 2: журналы Heroku не могут найти свои 'backend.js' , Прямо сейчас у меня есть один основной каталог папки проекта, внутри которого две папки: ---> backend.js (node) и ---> frontend.js (угловой)

My package.json выглядит как это:

**"main": "frontend.js",** 
    "scripts": { 
    **"start": "node backend.js",** 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 

Возможно, я не понимаю, как геройку находит мои основные .js-файлы. Исходя из моего понимания, «start» - это файл узла, а «основной» файл - для файлов frontend, таких как угловые/html-файлы.

+0

После перемещения всего из подпапок в основную папку (backend.js, frontend.js, css-файлы, html-файлы), я могу еще раз подтвердить, что я могу запускать свое приложение локально. Но при развертывании FRESH в новом приложении heroku теперь я получаю следующие журналы: 2016-08-27T20: 45: 26.674272 + 00: 00 heroku [web.1]: состояние изменено с разбившегося на 2016-08-27T20: 45: 28.574699 + 00: 00 heroku [web.1]: запуск с командой 'node backend.js' 2016-08-27T20: 45: 30.818329 + 00: 00 heroku [web.1]: процесс завершен со статусом 1 –

+0

2016-08-27T20: 45: 30.753675 + 00: 00 приложение [web.1]: module.js: 341 2016-08-27T20: 45: 30.753686 + 00: 00 приложение [web.1]: throw err; 2016-08-27T20: 45: 30.753687 + 00: 00 приложение [web.1]:^ 2016-08-27T20: 45: 30.753687 + 00: 00 приложение [web.1]: 2016-08-27T20: 45: 30.753692 + 00: 00 app [web.1]: Ошибка: не удается найти модуль '/app/backend.js' 2016-08-27T20: 45: 30.753694 + 00: 00 app [web.1]: at Function .Module._load (module.js: 290: 25) 2016-08-27T20: 45: 30.753693 + 00: 00 app [web.1]: at –

+0

Function.Module._resolveFilename (module.js: 339: 15) 2016-08-27T20: 45: 30.753695 + 00: 00 app [web.1]: at Function.Module.runMain (module.js: 447: 10) 2016-08-27T20: 45: 30.753696 + 00: 00 app [web.1]: при запуске (node.js: 148: 18) 2016-08-27T20: 45: 30.753697 + 00: 00 приложение [web.1]: at node.js: 405: 3 –

ответ

1

Вы должны иметь возможность подключиться Мангуст к базе данных MLAB, делая это:

mongoose.connect(process.env.MONGODB_URI); 

При использовании аддона на Heroku, провайдер (MLab в данном случае) создаст базу данных для вас, а затем сохраните сведения о соединении (URL-адрес с узлом базы данных, имя пользователя, пароль, порт и т. д.) в качестве переменной среды, которую может использовать ваше приложение.

Вот почему вам нужно передать это переменное окружение process.env.MONGODB_URI в mongoose.connect: он соединит вас с правой базой данных =)

UPDATE: Так как вы обновили свой вопрос, я заметил еще один вопрос, который предотвратит это Бег.Вы должны сообщить своему приложению, чтобы он прослушивал конкретный порт Heroku (не 3000).

Что вам нужно сделать, это изменить свой вызов app.listen(3000), вместо этого скажите: app.listen(process.env.PORT || 3000); Это заставит ваше приложение работать правильно на обоих Heroku И в вашей локальной коробке разработки.

+0

Whoa! Извините, если я неправильно понял это, но для уточнения, мне даже не нужен админ mlab в Heroku? У меня уже есть учетная запись mlab, но я подумал, что мне понадобится аддон, чтобы синхронизировать ее ... вроде как мне нужна отдельная база данных postgresql, чтобы она работала с другим приложением, которое у меня есть. Во всяком случае, из руководства, похоже, что .env создается как отдельный файл в терминале ........, это правда, или это просто что-то, что я набираю все в файле server.js, который у меня есть? –

+0

Вам нужен админ mlab. После того, как вы добавите его, эта специальная переменная среды будет существовать волшебным образом для вашего приложения, и вы сможете подключиться к этой базе данных, используя этот код, который я вставил выше. В вашем примере кода вы подключались к тому, что выглядит как отдельная отдельная база данных. Но вы хотите сделать это так, как я показываю вам подключиться к mlab one вместо =) – rdegges

+0

Wow, вы быстро! Я очень взволнован, тестируя его сейчас, скоро отчитаюсь, спасибо, друг! :) –

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