簡體   English   中英

在httpd上通過Flask-PyMongo連接到MongoHQ URI時的ConnectionFailure

[英]ConnectionFailure when connecting to MongoHQ URI via Flask-PyMongo on httpd

我有一個帶有Mongo后端的Flask應用程序,可以在我的本地開發環境中完美運行。 我將其移至AWS托管的RHEL實例,並通過httpd / mod_wsgi使Flask應用程序正常工作。 但是,連接到MongoHQ上的數據庫仍然會失敗。

連接的代碼是這樣的:

from flask import Flask
from flask.ext.pymongo import PyMongo

app = Flask(__name__)
app.config["MONGO_URI"] = 'mongodb://myusername:mypasswd@myhost.mongohq.com:myport/mydb'
mongo = PyMongo(app)

示例查詢:

@app.route('/books')
def books()
    all_books = mongo.db.listings.distinct("bookinfo")
    return all_books

來自Apache的錯誤消息(為便於閱讀而編輯):

mod_wsgi (pid=5116, process='myProcess', application=''): Loading WSGI script '/route/to/myapp.wsgi'. 
mod_wsgi (pid=5116): Target WSGI script '/route/to/myapp.wsgi' cannot be loaded as Python module. 
mod_wsgi (pid=5116): Exception occurred processing WSGI script '/route/to/myapp.wsgi'. 
Traceback (most recent call last): 
File "/route/to/myapp.wsgi", line 10, in <module>
     from myApp import app as application   
File "/route/to/myapp.py", line 8, in <module>
     mongo = PyMongo(app)
File "/route/to/my/venv/lib/python2.6/site-packages/flask_pymongo/__init__.py", line 98, in __init__
    self.init_app(app, config_prefix)
File "/route/to/my/venv/python2.6/site-packages/flask_pymongo/__init__.py", line 230, in init_app
     cx = connection_cls(*args, **kwargs)
File "/route/to/my/venv/python2.6/site-packages/pymongo/mongo_client.py", line 352, in __init__
     raise ConnectionFailure(str(e))
ConnectionFailure: could not connect to myhost.mongohq.com:myport: [Errno 13] Permission denied

我的想法/調查:

  1. 當我刪除數據庫連接時,應用程序運行正常:所以它不是mod_wsgi,Apache或權限問題?
  2. 我可以通過Mongo shell和Python shell連接到mongo uri,但不能通過app連接:所以它不是防火牆問題?
  3. MongoHQ的超響應客戶服務(嚴重的,它們很棒)認為這是Flask-PyMongo驅動程序的一個問題,但我不知道如何調試它。

任何幫助/提示/可能性將不勝感激。

SELinux是這個的根本原因。 我已禁用防火牆,但從未通過編輯/ etc / sysconfig / selinux文件關閉SELinux。 這樣做后,應用程序仍有問題,但這個日志記錄代碼幫助很大:

import logging
file_handler = logging.FileHandler(filename='/var/www/myapp/flaskerror.log')
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM