弹性 Beanstalk 与 SQLite 不兼容。

3
我希望使用Flask框架在Amazon Elastic Beanstalk上放置一个非常简单的网站。该网站有一个欢迎表单,它从用户那里获取两个值,读取SQLite数据库并在屏幕上显示结果。该网站在我的本地机器上完美运行。问题出现在Elastic Beanstalk上。
我创建了一个zip文件,包括application.py、SQLite数据库、静态文件夹(用于bootstrap)和模板文件夹(用于两个模板),然后将其上传到Elastic Beanstalk。我的系统是Windows,运行Python 3.6。上传后,EB给了我绿色状态。我点击EB上的链接,进入表单页面。一切都很顺利。然而,当我点击表单中的提交按钮时,应该跳转到结果页面,但实际上我收到了以下错误信息:
内部服务器错误 服务器遇到内部错误,无法完成您的请求。服务器可能过载或应用程序中存在错误。
我检查了代码以确定Amazon EB无法理解的步骤,似乎程序在cur.execute('''SELECT a, b, c, d, e, f... 上失败,这意味着Amazon EB看不到/理解我的SQLITE数据库。
有人能帮忙吗?
以下是我Flask程序application.py的代码:
import os
import sqlite3
from flask import Flask, request, render_template

application = Flask(__name__)
@application.route('/', methods=['POST', 'GET'])
def index():
  if request.method == 'GET':
    return render_template('welcome.html')
  elif request.method == 'POST':
    conn = sqlite3.connect('Sky.db')
    cur = conn.cursor()
    weekendid= request.form['weekend']

    myData=[]
    cur.execute('''SELECT a, b, c, d, e, f, g
    FROM Table1 WHERE a = ? ORDER BY g DESC LIMIT 5''', (weekendid,))
    row = cur.fetchall()
    for i in row:
        average_1 = (i[1]+i[3])/2
        average_2 = (i[2]+i[4])/2
        variable1 = i[5]
        variable2 = i[6]
        cur.execute('''SELECT * FROM Table2 WHERE a = ?''', (i[0],))
        coords=cur.fetchone()
        zz = [average_1, average_2,variable1,variable2]

        myData.append(zz)

    return render_template('where.html', myData=myData)

if __name__ == '__main__':
    application.debug = True
    host = os.environ.get('IP', '127.0.0.1')
    port = int(os.environ.get('PORT', 80))
    application.run(host=host, port=port)
1个回答

2

首先,使用Elastic Beanstalk上的SQLite时要小心,因为如果更改配置很可能会杀死您的实例并重新部署。在您的情况下,似乎您并没有实际写入数据库,所以这不是问题。

找到错误的第一步可能是进入Elastic Beanstalk控制台,然后点击请求日志。它在日志窗格下方。 enter image description here

在那里,您应该能够获取来自实例的日志,并在/var/log/httpd/error_log下找到实际错误。

您还可以通过ssh登录到实例,并验证路径是否符合您的预期。当然,您也可以以这种方式找到日志。如果使用eb控制台工具,则可以简单地执行eb ssh


我找到了问题所在...它是数据库的问题。它被锁定了...只需右键单击属性,然后点击“允许所有用户完全控制”。问题解决了...谢谢! - Yannis G
@JohnG 如果我的回答有帮助,请问您能否使用勾号将其标记为已回答。这样它就不会显示为仍需要回答,而我也因回答问题而获得了一些声望。 - colde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接