如何正确启动节点服务器,以便apn将工作

当我通过node server.js从命令行运行我的服务器时,它的运行方式不同(特别是推送通知的工作方式),而不是当我用一个暴发户脚本启动它时。 我应该如何修改我的新贵脚本来解决这个问题?

下面是一个示例服务器,其中,在命令行中,新手和新手都失败了

 var apn = require('apn'); var options = { passphrase:'certpassphrase' }; var err = null; var apnConnection = new apn.Connection(options); apnConnection.on('error', function(error){ console.log("apscallback", 1, error); }); apnConnection.on('transmitted', function(notification){ console.log("apscallback", 2); console.log(notification); }); apnConnection.on('timeout', function(){ console.log("apscallback", 3); }); apnConnection.on('connected', function(){ console.log("apscallback", 4); }); apnConnection.on('disconnected', function(){ console.log("apscallback", 5); }); apnConnection.on('socketError', function(error){ console.log("apscallback", 6, error); }); apnConnection.on('transmissionError', function(errorCode, notification){ console.log("apscallback", 7, errorCode); }); apnConnection.on('cacheTooSmall', function(difference){ console.log("apscallback", 8); }); function sendTestNotification() { var deviceToken = 'mydevicetoken'; var myDevice = new apn.Device(deviceToken); var note = new apn.Notification(); note.expiry = Math.floor(Date.now() / 1000) + 60; // Expires 1 hour from now. // note.badge = 3; // note.sound = "ping.aiff"; // note.alert = "\uD83D\uDCE7 \u2709 You have a new message"; note.payload = {'message': 'somemessage', 'requester': 7}; apnConnection.pushNotification(note, myDevice); } sendTestNotification(); http.listen(port, function(){ console.log('listening on *:', port); }); 

下面是我的暴发剧本的样子:

 #!upstart description "My Server" start on started mountall stop on shutdown # Automatically Respawn: respawn respawn limit 99 5 env NODE_ENV=production chdir /home/user/my-server/ exec node /home/user/my-server/server.js >> /var/log/my-server.log 2>&1 

我得到的错误是:

 ... apscallback 4 apscallback 5 apscallback 1 [Error: Socket unusable after connection. Hint: You may be using a certificate for the wrong environment] ... (REPEATS) 

你在你的upstart脚本中设置了env NODE_ENV=production (默认情况下,如果没有设置,那么如果没有设置这个variables,APN将会违背testing/沙箱环境)。 所以这将违背生产APN。 你有没有适当的证书来做到这一点(沙箱和生产证书不同)?

你是暴发户脚本可能默认为根。 也许root在密钥环中没有正确的证书。 尝试隐式地在你的暴发户脚本中设置用户。

你应该可以用setuid <username>来设置用户

    Interesting Posts