关于将大量脚本部署到Web服务器(Java,Python)的建议

时间:2017-07-19 17:56:32

标签: python linux http web flask

目前,我正在编写一个数据处理工作流程,并尝试在整个工作流程中将其部署到Web服务器上。我不得不使用两种不同的语言(Java和Python)。 我有一个HTML表单,从用户获取输入,然后我的python烧瓶应用程序将处理该输入并使用python中内置的调用函数将其传递给java程序。然后我的烧瓶应用程序将获取输出,再次处理它,并将其返回给用户。

我能够在我的本地Linux系统上完美地运行整个工作流程,打开HTML表单,填写输入并提交,然后浏览器将我重定向到结果页面,完全没有问题。但是当我尝试在我们实验室使用的word press服务器上部署整个管道时,我无法使其工作。我仍然可以运行烧瓶应用程序,但它根本不会在HTML表单上收听发布请求。我附上了我的烧瓶应用程序和HTML代码。有什么我没有设置好吗?或者是否有某种系统我可以使用它来在本地设置整个事件并将管道一次性部署到服务器上?我一直在查看python flask部署建议,但大多数只是让我很困惑。如果有人能给我一些有关将此管道部署到服务器上的有用建议,那将是很棒的。任何建议表示赞赏!

<form action = "http://localhost:5000/login" method = "POST" 
    enctype="multipart/form-data">
    <fieldset>
    <legend>Plot Config:</legend>
    <br>Please upload your input file:<br>
    <input type="file" name="file" accept="*/*">    
    <br><br>	
	

    <br>Classifer type:<br>
    <input type="radio" name="classifier" value="SVM" checked>Support Vector Machine<br>
    <input type="radio" name="classifier" value="NB">Naive Bayes<br>
    <input type="radio" name="classifier" value="RF">Random Forest<br>

    <br>Number of estimators (if you chose Random Forest as your classifier):<br>
    <input type="text" name="estimators" value="10"><br>	


    <br>Would you like to average your result?:<br>
    <input type="radio" name="avg" value="Yes" checked>Yes<br>
    <input type="radio" name="avg" value="No"> No<br>	
    

    <br>Feature Selection interval:<br>
    <input type="text" name="interval" value=10><br>	


    <br>Plot feature range:<br>
    <input type="text" name="plotrange" value=85><br>

    <br>Plot lengend size:<br>
    <input type="text" name="legendsize" value=7.5><br>    
    	  		
    <br>Plot line width:<br>
    <input type="text" name="plotlinewidth" value=2><br> 

    <br>Legend title:<br>
    <input type="text" name="legendtitle"><br>








<br><br>	
    <input type="reset">
    <input type="submit" value="Submit">

    

  </fieldset>
</form>

from flask import Flask, redirect, url_for, request,send_file
import configparser
from werkzeug import secure_filename
import os
from subprocess import call

app = Flask(__name__)

@app.route('/success/<name>')
def success(name):
    return 'welcome! %s' % name

@app.route('/get_image')
def get_image():
    if request.args.get('type') == '1':
       filename = 'download.jpg'
    else:
       filename = 'download.jpg'
    return send_file(filename, mimetype='image/jpg')    

@app.route('/login',methods = ['POST', 'GET'])
def login():
    if request.method == 'POST':
        f=request.files['file']
        workdir=os.path.join(os.getcwd(), 'Input(LeaveOneOut)',f.filename)
        print workdir     
        f.save(workdir)
        classifier = request.form['classifier']
        estimators=request.form['estimators']
        avg=request.form['avg']
        interval=request.form['interval']
        plotrange=request.form['plotrange']
        legendsize=request.form['legendsize']
        plotlinewidth=request.form['plotlinewidth']
        legendtitle=request.form['legendtitle']
        testoutput=classifier+" "+estimators+" "+avg+" "+interval+" "+plotrange+" "+legendsize+" "+plotlinewidth+" "+legendtitle        
        settings = configparser.ConfigParser()
        settings._interpolation = configparser.ExtendedInterpolation()
        settings.read('LeaveOneOutConfig.txt')
        settings.set('SectionOne', 'Classifier', str(classifier))   
        settings.set('SectionOne', 'number of estimators', str(estimators))
        settings.set('SectionOne', 'average the result', str(avg))
        settings.set('SectionOne', 'feature selection interval', str(interval)) 
        settings.set('SectionOne', 'plot feature range', str(plotrange))
        settings.set('SectionOne', 'plot lengend size', str(legendsize)) 
        settings.set('SectionOne', 'plot line width', str(plotlinewidth)) 
        settings.set('SectionOne', 'dataset type name', str(legendtitle))         
        call(["python", "LeaveOneOut.py"])





        with open('LeaveOneOutConfig.txt', 'wb') as configfile:
            settings.write(configfile)        

        return redirect(url_for('get_image'))
        return redirect(url_for('success',name =testoutput ))
if __name__ == '__main__':
    app.run(debug = True)

1 个答案:

答案 0 :(得分:0)

所以我最终发现,如果您希望内容公开,则需要使服务器运行在0.0.0.0和端口80。 在我的情况下,我将最后一行更改为app.run(“0.0.0.0”,port = 80)。另外,烧瓶附加服务器似乎非常不稳定,这实际上写在烧瓶文档中,您应该使用其他一些部署选项。我使用的是gunicorn,它易于使用并且对我来说很稳定。希望如果有人遇到同样的问题会有所帮助。