2014-05-13 3 views
0

포트 포워딩을 사용하여 라이브 데이터베이스에 로컬로 연결하는 데 문제가 없지만 오픈 시프트 장비에서 연결하려고하면 오류가 발생합니다. 나 코드로 시작 해보자 : 여기Nodejs 변경 데이터베이스 응용 프로그램의 라이브 데이터베이스에 연결할 수 없습니다.

app.get('/answerDB/:course?/:answerID?', function(req, res){ 
var course = req.param('course'); 
var answerID = req.param('answerID'); 
connectionpool.getConnection(function(err, connection){ 
    if(err){ 
     console.error('CONNECTION error: ',err); 
     res.statusCode = 503; 
     res.send({ 
      result: 'error', 
      err: err.code 
     }); 
    } 
    if (course === undefined && answerID === undefined) { 
     connection.query('SELECT * FROM questions WHERE counter = 0', function(err, rows, fields){ 
      if (err) { 
       console.error(err); 
       res.statusCode = 500; 
       res.send({ 
        result: 'error', 
        err: err.code 
       }); 
      } 
      for(var i in rows){ 
       var newCourse = rows[i].course; 
       newCourse = courses[newCourse]; 
       rows[i].course = newCourse; 
      } 
      res.send(rows); 
      connection.release(); 
     }); 
    } 

우리가받을 약간의 오류가 있습니다 :

여기

다음은 쿼리의 예입니다

var connectionpool = mysql.createPool({ 
     host  : process.env.OPENSHIFT_MYSQL_DB_HOST, 
     port  : process.env.OPENSHIFT_MYSQL_DB_PORT, 
     user  : process.env.OPENSHIFT_MYSQL_DB_USERNAME, 
     password : process.env.OPENSHIFT_MYSQL_DB_PASSWORD, 
     database : 'stembuds', 
     socket : process.env.OPENSHIFT_MYSQL_DB_SOCKET 
    }); 

변수 연결입니다.

먼저 크롬의 콘솔에서 오류가 :

GET에 http : // ** .rhcloud.com/answerDB 503 (서비스를 일시적으로 사용할 수)

하지만 가끔은 우리가 프록시 오류 :

GET에 http : // ** .rhcloud.com/exploreDB 502 (프록시 오류) 또한

, 내가 실행 된 명령 RHC 꼬리 -an odejs 여기에 내가받은 오류입니다

CONNECTION error: { [Error: ER_ACCESS_DENIED_ERROR: Access denied for user   'adminMYXaSuf'@'127.11.28.130' (using password: YES)] 
    code: 'ER_ACCESS_DENIED_ERROR', 
    errno: 1045, 
    sqlState: '28000', 
    fatal: true } 
TypeError: Cannot call method 'query' of undefined 
    at /var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/routes/site.js:172:15 
    at Pool.<anonymous> (/var/lib/openshift/5303aee55973ca4092000084/app- root/runtime/repo/node_modules/mysql/lib/Pool.js:49:16) 
    at Handshake.Sequence.end (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:24) 
    at Handshake.ErrorPacket (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/sequences/Handshake.js:93:8) 
    at Protocol._parsePacket (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/Protocol.js:202:24) 
    at Parser.write (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/Parser.js:62:12) 
    at Protocol.write (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/Protocol.js:37:16) 
    at Socket.<anonymous> (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/Connection.js:72:28) 
    at Socket.EventEmitter.emit (events.js:95:17) 
    at Socket.<anonymous> (_stream_readable.js:720:14) 

이제는 정의되지 않은 메서드 쿼리를 호출 할 수 없다고합니다. 우리는 그것이 이상하다고 생각했기 때문에 'connection.query'를 'connectionpool.query'로 변경했습니다. 그런 다음 undefined의 메서드 릴리스를 호출 할 수 없다고 말했습니다. 그래서 우리는 'connection.release()'를 'connectionpool.release()'로 변경했으며 객체 #에는 메서드가 릴리스되어 있지 않다고했습니다. 그래서 저는 그 실수의 한 부분을 소금 한알로 가져 가고 있습니다.

왜 연결되지 않을지 알 수 없습니다. 모든 정보를 크게 주시면 감사하겠습니다 - 고마워요.

답변

0

rhc port-forward을 사용하여 원격 OpenShift 호스팅 DB에 연결하는 동안 응용 프로그램 코드가 로컬로 작동하는 경우 응용 프로그램에 문서화되지 않은 종속성이있을 수 있습니다.

앱의 package.json 파일에 해당 dep를 포함하지 않고 개발자 환경에 로컬로 (또는 전 세계적으로) 무언가를 설치했을 수 있습니다.

신선한 환경에서 실행하기 위해 앱에 필요한 모든 것이 OpenShift로 푸시하기 전에 앱의 package.json 파일에 포함되어 있는지 확인하십시오. https://www.openshift.com/blogs/set-up-local-access-to-openshift-hosted-services-with-port-forwarding

+0

와우, 고마워. 나는 그 명령을 실행했고 그것은 완전히 효과가 있었다! :) https://www.youtube.com/watch?v=0hiUuL5uTKc – user2796352

+0

nice! https://gist.github.com/ryanj/9065881 –

0

데이터베이스 이름을 만들었습니까? 신청서의 이름이어야합니다. 데이터베이스 이름에 OPENSHIFT_APP_NAME 환경 변수를 사용할 수 있습니다. ssh를 이용하여 문제없이 mysql에 연결할 수 있습니까? 또한 로컬 머신이나 오픈 시프트 기어에서 오픈 시프트 기어를 사용하여 데이터베이스에 연결하려고합니까?

+0

내 질문의 첫 번째 줄에서 편집을 확인합니다

npm install my_dependency --save 

나는 OpenShift 호스팅 DB에 포트 포워딩 연결을 로컬로 테스트를 위해 도움이 될 수있는 몇 가지 추가 참고 사항을 서면으로 작성했습니다. 또한 - 예, 우리는 데이터베이스 이름을 만들었습니다. 우리 앱과 같은 이름을 사용해야하는 이유가 있습니까? 그리고 네, 내 애플 리케이션에 ssh 할 수 있고 mysql 승/아니오 문제에 연결 – user2796352

+0

만약 내가 당신에게 @ 또는 당신에게 통지를 얻으려면 모르겠다.또한 DB 이름을 앱 이름과 일치하도록 변경했으며 환경 변수를 사용하고 있지만 이전과 동일한 문제가 여전히 발생하고 있습니다. – user2796352

관련 문제