2016-04-21 35 views
1

我正在學習如何在使用node,express,GraphQL和Postgres的OpenShift上設置服務器,我需要一些幫助。在OpenShift上設置graphQL

當試圖建立GraphQL服務器我一直在關注這個和它的作品在我的本地機器上:

import Express from 'express'; 
import GraphQL from 'express-graphql'; 
import Schema from './db/GQLschema'; 

const app = Express(); 

app.use('/graphql', GraphQL({ 
    schema: Schema, 
    pretty: true, 
    graphiql: true 
})); 
... 

我使用OpenShift提供這樣的上述變化的server.js模板:

... 
self.app = express(); 

self.app.configure(function() { 
    self.app.use('/public', express.static(__dirname+'/public')); 
    self.app.use('/graphql', GraphQL({ 
     schema: Schema, 
     pretty: true, 
     graphiql: true 
    })); 
}); 
... 

但推到OpenShift時,這不起作用。我得到'內部服務器錯誤'而不是graphiql接口。

我是新來的這一點,但這裏有一些猜測到它可能與做:

  1. 連接到數據庫
  2. 缺少依賴

    1. 連接到數據庫:我有2個json配置文件。一個用於使用端口轉發SSH隧道連接到OpenShift的本地機器。這工作正常。另一個是生產。在其中,我擁有OpenShift爲我提供的所有數據庫名稱,用戶,端口,主機和密碼的字符串。我正在使用配置庫查看NODE_ENV來決定使用哪個配置json文件。我將OpenShift上的NODE_ENV變量設置爲生產。當我查詢它時,它顯示所有正確的字符串。還有什麼我需要設置?

    2. 缺少依賴關係:爲了保持整潔,我將後端代碼與前端代碼分開。所以後端代碼只安裝了express,graphql,sequelize,config和pg等東西。我需要其他東西來使graphiql頁面工作嗎?另外,我將所有/ node_modules /放在.gitignore文件中 - 我假設OpenShift在推送後安裝它們。這是正確的做法嗎?

希望得到任何幫助!

回答

1

行 - 我解決它通過執行以下操作:

在openshift CLI工具

打開錯誤日誌

rhc tail -a <yourappname> 

這會給你一些線索。在我的情況下,這是來自express-graphql「未解決的承諾」的消息。經過研究,我發現,如果你安裝並保存ES-承諾,該行添加到server.js文件的頂部:

require ('es6-promise').polyfill(); 

希望幫助別人!