无法在Openshift上运行keystone node.js应用程序
编辑2-最终注释 下面的解决方案对我很有效,但是您仍然需要手动指定mongo连接凭据,如上图所示,应用程序才能正确运行,否则将出现mongo auth错误 编辑1-添加完整的keystone.js keystone.js 我正在尝试构建我的第一个Keystone.js,它在我的机器上本地运行良好 现在,我正试图把我的网站推到Openshift上,但失败得很惨 我已通过将以下内容添加到keystone.js,让mongo连接:无法在Openshift上运行keystone node.js应用程序,node.js,openshift,keystonejs,Node.js,Openshift,Keystonejs,编辑2-最终注释 下面的解决方案对我很有效,但是您仍然需要手动指定mongo连接凭据,如上图所示,应用程序才能正确运行,否则将出现mongo auth错误 编辑1-添加完整的keystone.js keystone.js 我正在尝试构建我的第一个Keystone.js,它在我的机器上本地运行良好 现在,我正试图把我的网站推到Openshift上,但失败得很惨 我已通过将以下内容添加到keystone.js,让mongo连接: var mongoDbConnectionString = proc
var mongoDbConnectionString = process.env.OPENSHIFT_MONGODB_DB_URL || 'mongodb://localhost/*********';
但是,我无法让它正确运行,因为它似乎在绑定到ip和端口时出现问题,我正在Openshift上为它提供数据,我使用以下代码:
var host = process.env.OPENSHIFT_NODEJS_IP || process.env.OPENSHIFT_INTERNAL_IP || "127.0.0.1";
var port = process.env.OPENSHIFT_NODEJS_PORT || process.env.OPENSHIFT_INTERNAL_PORT || 3000;
结合:
keystone.init({
'name': '*********',
'brand': '*********',
'less': 'public',
'static': 'public',
'favicon': 'public/favicon.ico',
'views': 'templates/views',
'view engine': 'jade',
'emails': 'templates/emails',
'mongo': mongoDbConnectionString,
'host': host,
'port': port,
'auto update': true,
'session': true,
'auth': true,
'user model': 'User',
'cookie secret': '*********'
});
但我一直得到:
==> app-root/logs/nodejs.log <==
Error: listen EACCES
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1020:19)
at listen (net.js:1061:10)
at Server.listen (net.js:1135:5)
....
with 'node keystone.js'
DEBUG: Sending SIGTERM to child...
==>app root/logs/nodejs.log编辑1-根据@GarethJeanne的评论忽略server.js代码
如果您的入口点是keystone.js
,并且您根本没有使用server.js
(这会使我以前的答案静音),那么您需要确保您使用的是keystone0.3.3
或更新版本
该问题在中得到了解决,于2月28日合并,并首次包含在3月8日发布的版本0.3.3
中
我不认为这是一个关键问题。显然,您没有使用Keystone的开箱即用初始化和启动,因此Keystone负责创建或初始化您的Express应用程序
由于您没有共享所有代码(例如,self.initializeServer()
),我假设您正确设置了Express并将其连接到Keystone应用程序实例
我同样会假设self.app
是Express的一个实例
从您提交的代码中,我看到的唯一问题是,您正在将'self.port'
和'self.ipaddress'
传递到self.app.listen()
,每个参数用单引号括起来
这肯定会导致listeneacces
错误
尝试删除self.app.listen()
调用中围绕'self.port'
和'self.ipaddress'
的单引号
self.start=函数(){
//在特定接口(和端口)上启动应用程序。
self.app.listen(self.port、self.ipaddress、function()){
console.log(“%s:节点服务器已在%s上启动:%d…”,
日期(Date.now()),self.ipaddress,self.port);
});
};
我不能保证你的应用程序的其余部分可以正常工作,但至少应该可以消除listen EACCES
错误。Hi-JME,谢谢你的回复,上面的引用是一个输入错误,我已经用server.js和keystone.js的完整版本更新了问题,让你看看。@GarethJeanne,我有点困惑。你的应用程序(keystone.js
或server.js
)的入口点是什么?根据您问题中的错误日志,我将假设keystone.js
。如果是这样的话,你能告诉我你使用的是什么版本的Keystone吗?很抱歉,brain dead Dreat post,我只使用Keystone.js,这是入口点。所以请忽略server.js,我已经更新了上面的问题。就版本而言,我使用的是keystone-utils@0.1.13和发电机-keystone@0.3.0@GarethJeanne,实际上我是在询问您的Keystone版本,而不是生成器,但我假设您使用的是0.3.2
或更旧版本。我已经根据这些新信息更新了我的答案。是的,这已经对它进行了排序,尽管更新到0.3.3的过程有点痛苦,对于openshift上的远程实例来说足够简单,因为我刚刚在我的package.json中指定了它,但是在获取本地可用的所有模块时遇到了问题。
==> app-root/logs/nodejs.log <==
Error: listen EACCES
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1020:19)
at listen (net.js:1061:10)
at Server.listen (net.js:1135:5)
....
with 'node keystone.js'
DEBUG: Sending SIGTERM to child...