2016-04-21 75 views
0

我嘗試使用MOD-WSGI與Apache 2.2使用Python瓶,寧靜與MOD-WSGI

我有以下目錄結構:

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" 

當我向url http://<host>:5000/instances發送POST請求時,它的工作方式與預期的相同。我想用WSGI來完成這項工作。我使用Apache 2.2安裝了mod-wsgi

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

正如我在另一個問題中告訴你的,你應該回去再讀一遍Flask 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)