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