2014-04-09 4 views
0

독립 실행 형 응용 프로그램으로 실행중인 비누 서버가 있습니다. 즉, 단순히 실행하면됩니다. python mysoapserver.pywsgi를 사용하여 apache2에서 실행할 pysimplesoap 서버를 어떻게 설정합니까?

그러나 wsgi를 사용하여 apache2를 통해 액세스하고 싶습니다.

dispatcher = SoapDispatcher(
'TransServer', 
location = "http://127.0.0.1:8050/", 
action = 'http://127.0.0.1:8050/', # SOAPAction 
namespace = "http://example.com/sample.wsdl", prefix="ns0", 
trace = True, 
ns = True) 

#Function 
def settransactiondetails(sessionId,msisdn,amount,language): 
    #Some Code here 
    #And more code here 
    return {'sessionId':sid,'responseCode':0} 

# register the user function 
dispatcher.register_function('InitiateTransfer', settransactiondetails, 
    returns={'sessionId': str,'responseCode':int}, 
    args={'sessionId': str,'msisdn': str,'amount': str,'language': str}) 

logging.info("Starting server...") 
httpd = HTTPServer(("", 8050),SOAPHandler) 
httpd.dispatcher = dispatcher 
httpd.serve_forever() 

가 어떻게 위의 코드를 변경해야

from pysimplesoap.server import SoapDispatcher, SOAPHandler, WSGISOAPHandler 

코드 발췌 :

수입품 :

다음은 현재 코드의 일부 코드 발췌 apache2에서 wsgi를 통해 액세스 할 수 있도록합니다. /etc/apache2/sites-available/default 파일에 변경해야 할 내용을 포함시킬 수도 있습니다.

답변

3

WSGI 사양은 당신이 당신의 파이썬 스크립트에서 할 필요는 단순히과 같이 변수라는 이름의 응용 프로그램에서 WSGI 응용 프로그램에 노출되는 것을 말한다 :

#add this after you define the dispatcher 
application = WSGISOAPHandler(dispatcher) 

그런 /usr/local/www/wsgi-scripts/와 같은 아파치 안전한 곳에 스크립트를 배치 귀하의 사이트에서 - WSGIScriptAlias 지시문을 추가하면 Apache wsgi 스크립트 처리기에서 스크립트를 찾을 위치와 그 안에 실행해야하는 응용 프로그램을 알려줍니다.

WSGIScriptAlias /your_app_name /usr/local/www/wsgi-scripts/your_script_file 

<Directory /usr/local/www/wsgi-scripts> 
Order allow,deny 
Allow from all 
</Directory> 

그리고 mod_wsgi가 설치되어 있고 pythonpath에 pysimplesoap이 있다고 가정하면 잘 작동합니다. 또한 mod_wsgi를 사용할 때 dispatcher.locationdispatcher.action을 Apache가 사용하는 경로로 변경해야합니다. 이 정보는 Apache를 사용하든 사용하지 않든 wsdl 정의에 남아 있습니다. 당신이 the doc for wsgi in simple soapthe mod_wsgi guide 상담 자세한 정보가 필요하면

if __name__=="__main__": 
    print "Starting server..." 
    from wsgiref.simple_server import make_server 
    httpd = make_server('', 8050, application) 
    httpd.serve_forever() 

: 앱은 독립 실행 가능성을 유지하려면

, 당신의 HTTP 서버 섹션이와

logging.info("Starting server...") 
httpd = HTTPServer(("", 8050),SOAPHandler) 
httpd.dispatcher = dispatcher 
httpd.serve_forever() 

교체합니다.

+0

감사합니다. 그러나이 애플리케이션을 실행하기 위해 Apache를 추가/대체해야하는 코드는 무엇입니까? 나는 그것이 있다고 생각하지 않는 "wsgiref.simple_server 가져 오기 make_server 아파치 = make_server에서 ('', 8050, 응용 프로그램) httpd.serve_forever()" 공유 한 것이다. 아파치를 사용하는 대신 독립 실행 형 응용 프로그램으로 실행하는 것처럼 보입니다. – Phil

+0

@Phil 올바른지, 스크립트를 독립 실행 형으로 실행할 수 있도록이 코드를 추가했습니다. 아파치가이 응용 프로그램을 실행하기 위해서 필요한 유일한 파이썬 코드는'application' 변수 정의입니다. wsgi와 mod_wsgi가 작동하는 방식입니다. WSGIScriptAlias ​​지시어는 아파치에게이 애플리케이션 정의를 포함하는 스크립트를 어디에서 찾아야하는지 알려줍니다. 물론 mod_wsgi가 설치되어 있어야합니다 :) http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIScriptAlias에서 자세한 내용을 볼 수 있습니다.html – jhnwsk

+0

@ 필 귀하의 의견에 따라 답변을 편집했습니다. 현재 유익한 정보가되었습니다. – jhnwsk