setting up graphQL on OpenShift

时间:2016-04-21 22:26:40

标签: postgresql openshift graphql

I'm learning how to set up a server on OpenShift that uses node, express, GraphQL and Postgres and I need some help.

When trying to set up the GraphQL Server I've been following this and it works on my local machine:

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

I'm using the server.js template provided by OpenShift so the above changes to:

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

But this doesn't work when pushed up to OpenShift. I get 'Internal Server Error' instead of the graphiql interface.

I'm new to this, but here are some guesses as to what it might have to do with:

  1. Connecting to database
  2. Missing dependencies

    1. Connecting to database: I have 2 json config files. One for my local machine which is connected using a port-forward SSH tunnel to OpenShift. That works fine. The other is one for production. In it I have all the strings for the database name, user, port, host, and password, that OpenShift provided me. I'm using the config library which looks at NODE_ENV to decide which config json file to use. I set the NODE_ENV variable on OpenShift to production. When I query it, it shows all the correct strings. Is there something else I need to set?

    2. Missing dependencies: To keep it neat, I am keeping my back-end code separate from my front-end code. So the back-end code has only the express, graphql, sequelize, config, and pg stuff installed. Do I need something else to make the graphiql page work? Also, I put all the /node_modules/ in the .gitignore file -- I assumed that OpenShift installs them post push. Was that the right thing to do?

Would appreciate any help!

1 个答案:

答案 0 :(得分:1)

好的 - 我通过以下方式解决了这个问题:

openshift cli工具中的

打开错误日志

rhc tail -a <yourappname>

这会给你一些线索。就我而言,这是来自express-graphql&#34;未解决的承诺&#34;的消息。经过研究,我发现如果您安装并保存es-promise并将此行添加到server.js文件的顶部:

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

希望能帮到别人!