托管 Flask Web 应用程序时出现内部服务器错误

问题描述 投票:0回答:1

我正在尝试在托管平台上托管 Flask Web 应用程序。到目前为止,我已经尝试在 vercel 和 pythonanywhere 上托管,但似乎两者都遇到了同样的问题。该代码在本地运行良好,但在云端它给了我一个

Internal Server Error (500)

代码很长,但我会在这里尝试缩短它。 这是我的烧瓶应用程序:

from flask import Flask, request, jsonify, Response, send_from_directory, render_template
from flask_cors import CORS
import pandas as pd
import io, os, time


app = Flask(__name__, static_folder='static', template_folder='templates')
CORS(app)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/process', methods=['POST'])
def process_file():
    try:
        type_id = int(request.form.get('buttonID'))
        
        uploaded_file = request.files['file']
        input_filename = uploaded_file.filename
        uploaded_file.save(input_filename)
                        
        output_filename = process_file(input_filename)
        
        file_extension = os.path.splitext(output_filename)[1].lower()
        if file_extension == '.csv':
            mimetype = 'text/csv'
        elif file_extension in ['.xls', '.xlsx']:
            mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        else:
            return jsonify({"error": "Unsupported output file format"}), 400
        
        with open(output_filename, 'rb') as f:
            file_contents = f.read()
        
        return Response(
            file_contents,
            mimetype=mimetype,
            headers={"Content-Disposition": f"attachment;filename={output_filename}"}
        )
        
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/static/<path:path>')
def send_static(path):
    return send_from_directory('static', path)

定义了

process_file
函数,它只是在目录中创建处理后的电子表格文件并返回其名称

这是我的 script.js(缩短):

async function handleSubmit() {
  if (!selectedButton) {
    document.getElementById('process-warning').style.display = 'block';
    return;
  }

  if (!fileForProcessing) {
    console.error("No file selected.");
    return;
  }


  const formData = new FormData();
  formData.append('file', fileForProcessing);
  formData.append('buttonID', selectedButton);

  try {
    const response = await fetch(`${window.location.origin}/process`, {
      method: 'POST',
      body: formData
    });

    if (response.status === 200) {
      newFileData = await response.arrayBuffer();
      recvdFile = true;

    }
  } catch (error) {
    console.error(`Error: ${error}`);
  } finally {
    document.getElementById('spinner').style.display = 'none';
    document.getElementById('processing-incomplete').style.display = 'none';
  }
}

错误具体发生在这一行:

const response = await fetch(`${window.location.origin}/process`, {

当我按下提交按钮并调用

handleSubmit()
函数时,会发生这种情况

起初我以为这是 vercel 的问题,因为该程序在本地运行得很好,所以我在任何地方尝试了 python,但我遇到了同样的问题。我一直在尝试找出此问题发生的位置,但控制台只是显示“内部服务器错误”并且没有给我任何线索。

有什么办法可以解决这个问题吗? TIA

javascript python flask cloud hosting
1个回答
0
投票

自己设法解决了问题,结果发现我失踪了

openpyxl
。 尽管做了
pip freeze
,但我的库没有添加到需求文件中的依赖项列表中。

© www.soinside.com 2019 - 2024. All rights reserved.