Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Gcloud上部署Flask development server时,获取服务器错误,但由于权限原因,可以作为本地服务器正常工作_Python_Flask_Sqlalchemy_Gcloud - Fatal编程技术网

Python 在Gcloud上部署Flask development server时,获取服务器错误,但由于权限原因,可以作为本地服务器正常工作

Python 在Gcloud上部署Flask development server时,获取服务器错误,但由于权限原因,可以作为本地服务器正常工作,python,flask,sqlalchemy,gcloud,Python,Flask,Sqlalchemy,Gcloud,错误:sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)尝试写入只读数据库 2019-12-17 10:12:11默认值[20191217t021035][SQL:在帖子中插入(标题、发布日期、内容、用户id)值(?,,?)] 2019-12-17 10:12:11默认值[20191217t021035][参数:('hi','2019-12-17 10:12:11.435775', 嗨,3)] 2019-12-17 10:12:1

错误:sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)尝试写入只读数据库 2019-12-17 10:12:11默认值[20191217t021035][SQL:在帖子中插入(标题、发布日期、内容、用户id)值(?,,?)] 2019-12-17 10:12:11默认值[20191217t021035][参数:('hi','2019-12-17 10:12:11.435775', 嗨,3)] 2019-12-17 10:12:11默认值[20191217t021035](此错误的背景信息为:)

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 
config.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云运行时的文件系统是只读的():

运行时包括一个完整的文件系统。文件系统是只读的,除了位置
/tmp
,该位置是一个虚拟磁盘,将数据存储在App Engine实例的RAM中

  • 因此,从理论上讲,您应该能够将文件存储在
    /tmp
    中(注意SQLAlchemy DB URI中的四个斜杠表示绝对文件路径):
  • 但这意味着a)每次实例停止时,数据库都会消失b)如果将应用程序扩展到多个实例,每个实例都会有自己的数据库
  • 我建议你看看谷歌云SQL上的Postgresql,看看如何从AppEngine连接到谷歌云数据库服务器。然后,配置将更改为类似以下内容:
SQLALCHEMY\u DATABASE\u URI='postgres://:@/?unix\u sock=/cloudsql//.s.PGSQL.5432'
SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/site.db'
SQLALCHEMY_DATABASE_URI = 'postgres://<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql/<cloud_sql_instance_name>/.s.PGSQL.5432'