最近,我一直在尝试部署一个交互式google应用程序引擎,它可以写入sqlite数据库,在本地运行应用程序时工作正常,但在服务器上运行时,我收到错误: OperationalError: attempt to write a readonly database 我尝试更改我的 .db , .sql 但运气不好。任何建议都将不胜感激。
OperationalError: attempt to write a readonly database
.db
.sql
c0vxltue1#
您可以尝试更改目录的权限,并检查.sqllite文件是否存在且可写但一般来说,在使用appengine时依赖磁盘数据并不是一个好主意,因为磁盘存储是短暂的(除非您在flex上使用持久性磁盘),但即便如此,使用云数据库解决方案也更好
7cjasjjr2#
应用程序引擎具有完全只读的文件系统,即不能修改任何文件。但是,顾名思义,它有/tmp/文件夹来存储临时文件。它实际上使用ram,所以如果数据库很大的话这不是个好主意。在应用程序启动时,您可以将原始数据库文件复制到/tmp/文件夹,然后从那里使用它。这很管用。但是,当应用程序节点扩展到0时,数据库中的所有更改都将丢失。应用程序的每个节点都有自己的数据库副本,并且数据不会在节点之间共享。如果需要在应用程序节点之间共享数据,最好使用cloudsql。
2条答案
按热度按时间c0vxltue1#
您可以尝试更改目录的权限,并检查.sqllite文件是否存在且可写
但一般来说,在使用appengine时依赖磁盘数据并不是一个好主意,因为磁盘存储是短暂的(除非您在flex上使用持久性磁盘),但即便如此,使用云数据库解决方案也更好
7cjasjjr2#
应用程序引擎具有完全只读的文件系统,即不能修改任何文件。但是,顾名思义,它有/tmp/文件夹来存储临时文件。它实际上使用ram,所以如果数据库很大的话这不是个好主意。
在应用程序启动时,您可以将原始数据库文件复制到/tmp/文件夹,然后从那里使用它。
这很管用。但是,当应用程序节点扩展到0时,数据库中的所有更改都将丢失。应用程序的每个节点都有自己的数据库副本,并且数据不会在节点之间共享。如果需要在应用程序节点之间共享数据,最好使用cloudsql。