在OpenShift上DIY龙卷风时的套接字错误
我尝试在openshift的DIY环境中自己部署一个tornado,但遇到了一些问题。
我安装了python 2.7.6和tornado 3.2,并试图运行tornado的hello world示例。但总是出错。此外,我已经对$OPENSHIFT_REPO_DIR/diy执行了chmod 777的指令。
下面是我所做的事情和错误日志。我该如何解决这个问题并启动我的应用程序呢?
1. 预安装:
- 在$OPENSHIFT_DATA_DIR中安装python 2.7.6
- 通过pip安装tornado 3.2
2. tornado代码
这个名为start.py的文件是$OPENSHIFT_REPO_DIR/diy中唯一的文件。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8080)
tornado.ioloop.IOLoop.instance().start()
3. action_hooks文件:
启动:
nohup $OPENSHIFT_DATA_DIR/bin/python $OPENSHIFT_REPO_DIR/diy/start.py > $OPENSHIFT_DIY_LOG_DIR/tornado_server.log 2>&1 &
停止:
source $OPENSHIFT_CARTRIDGE_SDK_BASH
if [ -z "$(ps -ef | grep start.py | grep -v grep)" ]
then
client_result "Application is already stopped"
else
kill `ps -ef | grep start.py | grep -v grep | awk '{ print $2 }'`
> /dev/null 2>&1
fi
4. 日志
Traceback (most recent call last):
File ".../app-root/runtime/repo//diy/start.py",
line 13, in <module>
application.listen(8080)
File ".../app-root/data/lib/python2.7/site-packages/tornado/web.py",
line 1559, in listen
server.listen(port, address)
File ".../app-root/data/lib/python2.7/site-packages/tornado/tcpserver.py",
line 117, in listen
sockets = bind_sockets(port, address=address)
File ".../app-root/data/lib/python2.7/site-packages/tornado/netutil.py",
line 104, in bind_sockets
sock.bind(sockaddr)
File ".../app-root/data/lib/python2.7/socket.py",
line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied
2 个回答
1
你不一定要使用自己动手做的卡匣(DIY cartridge)来在Openshift上部署Tornado。
可以看看这个示例库:https://github.com/avinassh/openshift-tornado-starter
2
这样做是行不通的,因为你需要绑定到 $OPENSHIFT_DIY_IP 和 $OPENSHIFT_DIY_PORT。不要使用 application.listen(8080)
,而是用下面的代码
ip = os.environ['OPENSHIFT_DIY_IP']
port = int(os.environ['OPENSHIFT_DIY_PORT'])
application.listen(port , ip)
另外,我写了一篇博客,可能对你有帮助,链接在这里 https://www.openshift.com/blogs/day-25-tornado-combining-tornado-mongodb-and-angularjs-to-build-an-app