2014-05-13 75 views
0

我沒有問題使用端口轉發在本地連接到實時數據庫,但是當我們從openshift設備連接時,出現錯誤。讓我的代碼開頭:無法連接到Nodejs的實時數據庫Opensift應用

這裏是可變

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 
    }); 

連接下面是一個查詢的例子:

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(); 
     }); 
    } 

以下是我們收到的一些錯誤。

首先是在Chrome的控制檯錯誤:

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

如果您的應用程序代碼在連接到遠程OpenShift宿主數據庫(使用rhc port-forward)時在本地工作,那麼我會懷疑您的應用程序可能有一些未公開的依賴關係。

這可能是因爲你已經在你的開發環境中安裝了本地(或全局)的東西,而不在你的應用程序的package.json文件中包含該dep。

確保您的應用程序在新環境中運行所需的所有內容在推送到OpenShift之前已包含在您的應用程序的package.json文件中。

npm install my_dependency --save 

我已經寫了一些額外的注意事項可能對測試是有用的局部用一個OpenShift託管DB端口轉發連接: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

不錯! https://gist.github.com/ryanj/9065881 –

0

您是否創建了該數據庫名稱?它應該是你的應用程序的名稱。您可以使用OPENSHIFT_APP_NAME環境變量作爲數據庫名稱。你可以ssh進入你的設備並連接到mysql沒有任何問題?另外,你是否試圖從你的本地機器或你的openshift齒輪連接到你的openshift齒輪上的數據庫?

+0

檢查編輯我的問題的第一道防線。另外 - 是的,我們確實創建了該數據庫名稱。是否有任何理由它應該與我們的應用程序名稱相同?是的,我可以ssh進入我的應用程序,並連接到MySQL瓦特/無問題 – user2796352

+0

不知道如果我不得不@你或不爲你得到通知。此外,我們更改了數據庫名稱以匹配應用程序名稱,並使用環境變量,但我們仍遇到與以前相同的問題。 – user2796352