2016-04-21 5 views
0

Я пытаюсь использовать мод-WSGI с Apache 2,2Использование Python колба-успокоительной с модом-WSGI

I имеют следующую структуру каталогов:

scheduling-algos 
-lib 
-common 
-config 
    -config.json 
resources 
-Optimization.py 
optimization.wsgi 
optimization_app.py 

Мой optimization_app.py заключается в следующем:

from flask import Flask 
from flask_restful import Api 
from resources.Optimization import OptimizationAlgo 

def optimizeInstances(): 
    optimization_app = Flask(__name__) 
    api = Api(optimization_app) 
    api.add_resource(OptimizationAlgo, '/instances') 

if __name__ == '__main__': 
    optimizeInstances() 
    optimization_app.run(host='0.0.0.0', debug=True) 

Мой Optimization.py код выглядит следующим образом:

class OptimizationAlgo(Resource): 
    def post(self): 
     return "success" 

Когда я делаю запрос POST на адрес http://<host>:5000/instances, он работает так, как ожидалось. Я хочу сделать эту работу, используя WSGI. У меня есть mod-wsgi с Apache 2.2.

Мой optimization.wsgi файл выглядит следующим образом

import sys 
sys.path.insert(0, '<path to app>') 

from optimization_app import optimizeInstances as application 

я получаю следующее сообщение об ошибке: TypeError: optimizeInstances() takes no arguments (2 given). По-видимому, это не правильный способ использования WSGI. Каков правильный способ использования WSGI? По-видимому, это неправильный способ использования WSGI.

+0

Эффективно дубликатом http://stackoverflow.com/questions/36763304/typeerror-takes-no-arguments -2-дали-когда-используя-WSGI-в-питон-2-7 –

ответ

0

Как я уже говорил в своем другом вопросе, вы должны вернуться назад и снова прочитать флягу documentation. Таким образом вы будете учиться и понимать правильно. Пренебрегая советами и ожидая, что другие расскажут вам, это только раздражает людей, и они перестанут вам помогать. Предположим, вы учтите это, вместо того, чтобы оставлять след отдельными вопросами в надежде, что кто-то решит ваши проблемы для вас.

Тем не менее, я не вижу, как код, который вы даете, может даже работать с сервером разработки Flask, как вы утверждаете. Проблема заключается в том, что optimization_app = Flask(__name__) устанавливает локальную переменную в пределах области действия. Он не устанавливает глобальную переменную. В результате вызов optimization_app.run(host='0.0.0.0', debug=True) должен завершиться ошибкой с LookupError, так как он не увидит переменную, называемую optimization_app. Даже не уверен, почему вы беспокоитесь о функции.

Если вы посмотрите на документацию Колба, шаблон он, скорее всего, использовать это:

# optimisation.wsgi 

import sys 
sys.path.insert(0, '<path to app>') 

# We alias 'app' to 'application' here as mod_wsgi expects it to be called 'application'. 

from optimization_app import app as application 

# optimization_app.py 

from flask import Flask 
from flask_restful import Api 
from resources.Optimization import OptimizationAlgo 

app = Flask(__name__) 

api = Api(app) 
api.add_resource(OptimizationAlgo, '/instances') 

if __name__ == '__main__': 
    app.run(host='0.0.0.0', debug=True) 
Смежные вопросы