gpt4 book ai didi

python - Flask 开发服务器部署在 Gcloud 上时出现服务器错误,但由于权限作为本地服务器工作正常

转载 作者:行者123 更新时间:2023-12-01 06:42:47 24 4
gpt4 key购买 nike

错误:sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)尝试写入只读数据库2019-12-17 10:12:11 默认[20191217t021035] [SQL: INSERT INTO post (title, date_posted, content, user_id) VALUES (?, ?, ?, ?)]2019-12-17 10:12:11 默认[20191217t021035] [参数: ('hi', '2019-12-17 10:12:11.435775','嗨', 3)]2019-12-17 10:12:11 default[20191217t021035](此错误的背景位于:http://sqlalche.me/e/e3q8)

app.yaml

runtime: python37
env: standard
handlers:
- url: /main.css
static_dir: static/*
expiration: "1h"
runtime_config:
python_version: 3.7
# This configures Google App Engine to serve the files in the app's static
# directory.

#beta_settings:
# cloud_sql_instances: flask-journal:us-west1:flask-project1

entrypoint: gunicorn -b :$PORT run:app

配置.py

import os

class Config:
SECRET_KEY = '[a correct key]'
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'

# E-Mail with Flask
MAIL_SERVER = 'smtp.googlemail.com'
MAIL_PORT = 587
MAIL_USER_SSL = True
# Need to set environment variable
MAIL_USERNAME = os.environ.get('EMAIL_USER')
MAIL_PASSWORD = os.environ.get('EMAIL_PW')
MAIL_DEFAULT_SENDER = os.environ.get('EMAIL_USER')

然后我还有一个数据库所在的site.db。使用后

gcloud app deploy

网站托管,但我无法进行任何会更改数据库的操作。鉴于上面显示的错误输出,我几乎可以肯定这是一个权限错误。我看到了可以在 Linux 上执行 chmod 的解决方案,但是在 Windows 10 上该怎么办?我猜想更改数据库的“用户”现在不再被允许(甚至登录)在执行

时写入数据库
db.commit()

最佳答案

Google Cloud 运行时的文件系统是只读的 ( https://cloud.google.com/appengine/docs/standard/python3/runtime#filesystem ):

The runtime includes a full filesystem. The filesystem is read-only except for the location /tmp, which is a virtual disk storing data in your App Engine instance's RAM.

  • 因此理论上您应该能够将文件存储在 /tmp 中(注意 SQLAlchemy DB URI 中的四个斜杠表示绝对文件路径):
SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/site.db'
  • 但这意味着 a) 每次实例停止时数据库都会消失 b) 如果您将应用程序扩展到多个实例,则每个实例都将拥有自己的数据库。
  • 我建议您看看 Google Cloud SQL 上的 Postgresql,请参阅 https://cloud.google.com/sql/docs/postgres/connect-app-engine了解如何从 App Engine 连接到 Google Cloud 数据库服务器。然后配置将更改为如下内容:
SQLALCHEMY_DATABASE_URI = 'postgres://<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql/<cloud_sql_instance_name>/.s.PGSQL.5432'

关于python - Flask 开发服务器部署在 Gcloud 上时出现服务器错误,但由于权限作为本地服务器工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com