简体   繁体   中英

Postgresql on OpenShift 2, using node.js

I have an app that uses Node.js and Postgresql on OpenShift, I can connect locally to the database and make queries, but I can't get it to work on the openshift server. When I push to server, I get this error:

Waiting for application port (8080) become available ... Application 'myapp' failed to start (port 8080 not available) But Im using the port 8080...

My openshift ports are:

Service --- Local --------------- OpenShift

node ------ 127.0.0.1:8080 => 127.8.120.129:8080

postgresql 127.0.0.1:5432 => 127.8.120.130:5432

And here I write the important code line. First, the server.js :

...
var db = require('./postgresql/database.js');
db.sync();
...
var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'
server.listen(server_port, server_ip_address, function () {});
...

And database.js :

var Sequelize = require('sequelize');
var bd_url = process.env.OPENSHIFT_POSTGRESQL_DB_URL || 'postgres://'user':'pass'@127.0.0.1:5432/sw'
var sequelize = new Sequelize(bd_url, {
    dialect: 'postgres',
    dialectOptions: {}
});
module.exports = sequelize;

Does anyone know what can fail?

Thanks!

OpenShift provides a default web server (written in Ruby) on almost every container/cartridge you create.

Every service is started using the " start " service hook, located at:

$OPENSHIFT_REPO_DIR/.openshift/action_hooks/start

You may find a line like this one:

[]\> nohup $OPENSHIFT_REPO_DIR/diy/testrubyserver.rb $OPENSHIFT_DIY_IP $OPENSHIFT_REPO_DIR/diy |& /usr/bin/logshifter -tag diy &

In order to verify which application is using port 8080, you can execute " oo-lists-ports " command.

This command is just an alias for " lsof " command.

Execute it without any arguments and you'll obtain the application that it's locking your port 8080 (in my case):

[]\> oo-lists-ports
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    88451     1027   10u  IPv4 392176      0t0  TCP 127.2.1.129:8080 (LISTEN)
[]\>

With the above information (PID), you just need to kill the related process: (in my case)

[]\> ps -ef |grep 88451
1027      62829  61960  0 08:33 pts/0    00:00:00 grep 88451
1027      88451      1  0 Jun21 ?        00:00:16 node faceBot.js

[]\> kill -9 88451

After killing the process that is locking your port 8080 you will be able to run your Node JS stack on that port.

Regards

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM