Elastic Beanstalk 不适用于 SQLite

Posted

技术标签:

【中文标题】Elastic Beanstalk 不适用于 SQLite【英文标题】:Elastic Beanstalk does not work with SQLite 【发布时间】:2018-10-01 21:59:35 【问题描述】:

我想使用 Flask 框架在 Amazon EB 上放置一个非常简单的网站。该网站有一个欢迎表单,它从用户那里获取两个值,读取 SQLite 数据库并在屏幕上显示结果。该网站在我的本地机器上运行良好。问题出在 Elastic Beanstalk 上。

我使用 application.py、SQLite 数据库、静态文件夹(用于引导程序)和模板文件夹(用于两个模板)创建了一个 zip 文件,并将其上传到 Elastic Beanstalk。我的系统是windows,运行python 3.6。上传后,EB 给我绿色状态。我单击 EB 上的链接并转到表格。到目前为止一切正常。然后,当我单击表单时,按钮提交将我带到结果页面,但我收到:

内部服务器错误 服务器遇到内部错误,无法完成您的请求。要么服务器过载,要么应用程序出错。

我使用代码来识别 Amazon EB 无法理解的步骤,并且似乎程序在 cur.execute('''SELECT a, b, c, d, e, f...表示 Amazon EB 看不到/理解我的 SQLITE 数据库。

有人可以帮忙吗?

这是我的烧瓶程序 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】:

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

查找错误的第一步可能是转到 Elastic Beanstalk 控制台并单击 Request logs。它位于日志窗格下。

您应该能够从您的实例中获取日志并在/var/log/httpd/error_log 下找到实际错误。

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

【讨论】:

我发现了问题所在……这是数据库的问题。它被锁定了..只需右键单击属性并单击所有用户的“允许完全控制”。解决了它...谢谢! @JohnG 如果我的回答有帮助,我可以请您使用复选标记将其标记为已回答。这样它就不会显示为仍然需要答案,而且我也因回答它而获得了一些声誉。

以上是关于Elastic Beanstalk 不适用于 SQLite的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk Tomcat 适用于 .war 但不适用于 .zip

将 AMI 映像用于 Elastic Beanstalk

Elastic Beanstalk 上用于 Django 的 PostgreSQL

CloudFront 与 Elastic Beanstalk 结合用于动态应用程序?

用于 Go 的 Elastic Beanstalk Procfile

用于多容器 docker 的 Elastic beanstalk 与 ECS