2016-08-27 4 views
1

이것은 Heroku에서 처음 시도합니다. 나는 heroku에서 "배포 성공"했지만 내 응용 프로그램을 방문했을 때 "응용 프로그램이 실패했습니다."이라고 표시됩니다. https://scotch.io/tutorials/use-mongodb-with-a-node-application-on-herokuheroku에 nodejs/mongoose를 배포합니다.

내가 까다로운 것은 내가 몽구스를 사용하고 있기 때문에, 그것은 URI와 잘 관련되지 않을 수 있습니다 생각 :

나는이 가이드를 따라 갔다. 나는 또한 mlab addon을 사용하고있다. 이 로컬로, 난 그냥 숨겨진 .json 파일에 사용자 이름과 암호를 저장 덕분에 작동하도록

 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의를 이해하지 않았다 :

여기 내 백엔드에 대한 내 설정이다. gitignore. 가이드에서는 URI를 URI 파일에 변수로 직접 삽입하여 시도해 보았습니다. Heroku가/nodejs

를 설정 * : 나는

나중에 내가 이상 시작했을 때에

, 나는 또한 Heroku가이 표준 buildpacks를 감지하지와 반복되는 문제가 가지고 계속 ... 일 '환경 숨겨진'을하는 방법도 모르겠어요 *** 편집 :

아직 몇 가지 문제가 있습니다. 나는 지금 내 '몽고 creds'나의 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에 배포 할 때 디렉토리를 기본 폴더로 변경하여 모든 것을 배포합니다.

"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" 
    } 
} 

****** 편집 2 : Heroku가 로그 내 'backend.js'를 찾을 수 없습니다 도움이된다면

또한, 여기 내 package.json의 모습입니다 . 지금은 하나의 메인 프로젝트 폴더 디렉토리가 있는데 그 안에 --- 폴더> --- backend.js (노드)와 ---> frontend.js (각)

내 package.json은 다음과 같이 보입니다. 이 :

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

heroku가 내 주 .js 파일을 찾는 방식을 잘못 이해했을 수 있습니다. 나의 이해에서부터 '시작'은 노드 파일을위한 것이고 '메인'파일은 각도/html 같은 프론트 엔드를위한 것이다.

+0

하위 폴더에서 모든 것을 메인 폴더 (backend.js, frontend.js, css 파일, html 파일)로 옮긴 후 내 앱을 로컬로 실행할 수 있음을 다시 확인할 수 있습니다. 하지만 새로운 heroku 앱에 FRESH를 배포 할 때 다음과 같은 로그가 생성됩니다. 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 app [web.1] : module.js : 341 2016-08-27T20 : 45 : 30.753686 + 00 : 00 app [web.1] : 오류가 발생했습니다. 2016-08-27T20 : 45 : 30.753687 + 00 : 00 app [web.1] :^ 2016-08-27T20 : 45 : 30.753687 + 00 : 00 app [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 함수 .module._load (module.js : 290 : 25) 2016-08-27T20 : 45 : 30.753693 + 00 : 00 app [web.1] : –

+0

Function.Module._resolveFilename (module.js : 339 : 15) 2016-08-27T20 : 45 : 30.753695 + 00 : 00 app [web.1] : 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 app [web.1] : node.js : 405 : 3 –

답변

1

당신은이 작업을 수행하여 MLAB 데이터베이스에 몽구스를 연결할 수 있어야합니다 :

당신을 위해 데이터베이스를 작성합니다 (이 경우 MLAB) Heroku가 공급자에 애드온을 사용하는
mongoose.connect(process.env.MONGODB_URI); 

, 그런 다음 응용 프로그램에서 사용할 수있는 환경 변수로 연결 세부 정보 (데이터베이스 호스트, 사용자 이름, 암호, 포트 등과 같은 URL)를 저장하십시오. 당신이 mongoose.connectprocess.env.MONGODB_URI 변수 해당 환경을 전달해야하는 이유

: 그것은 바로 데이터베이스에 연결됩니다 =)

UPDATE : 당신이 질문을 업데이트하기 때문에, 나는이를 방지 할 또 다른 문제를 발견 달리는.특정 Heroku 포트 (3000 아님)에서 수신 대기하도록 앱에 지시해야합니다.

당신이해야 할 일은 app.listen(3000) 호출을 변경하는 것입니다. app.listen(process.env.PORT || 3000); 이렇게하면 응용 프로그램이 Heroku와 로컬 개발 상자 모두에서 올바르게 실행됩니다.

+0

와우! 미안, 내가 이것을 오해한다면, 분명히하기 위해, 나는 Heroku에서 mlab 애드온이 필요하지 않은가? 나는 이미 mlab 계정을 가지고 있지만 addon을 sync와 동기화 할 필요가 있다고 생각했다. 내가 갖고있는 다른 응용 프로그램과 작동하게하려면 별도의 postgresql 데이터베이스가 필요한 것과 같다. 어쨌든 .env가 터미널에서 별도의 파일로 만들어진 것처럼 보입니다 ........ 사실입니까, 아니면 server.js 파일에 입력 한 것입니까? –

+0

mlab addon이 필요합니다. 추가 한 후에는 해당 특수 환경 변수가 앱에 마술처럼 존재하게되며 위에 붙여 넣은 코드를 사용하여 해당 데이터베이스에 연결할 수 있습니다. 귀하의 예제 코드에서 당신은 당신이 가진 또 다른 데이터베이스처럼 보이는 것에 연결하고있었습니다. 하지만 당신이 mlab에 연결하는 것을 보여주고있는 방식대로하고 싶습니다. =) – rdegges

+0

와우, 빨리! 나는 지금 그것을 테스트하는 것에 대해 꽤 흥분한다. 곧 다시보고 할 것이니, 고마워! :) –

관련 문제