OperationalError:试图通过Github在Vercel上写一个只读DB (DB及其文件夹在我的本地comp



我正在尝试部署一个简单的Flask应用程序与SQLite数据库。它在本地运行时工作正常。我通过Github将其部署在Vercel上。它会一直工作,直到需要写入数据库。然后是

OperationalError: attempt to write a readonly database

DB和包含它的文件夹' instance '在我的本地系统上都是完全访问的,我可以用

看到它
attrib ~/instance 

命令行(我使用的是Windows 10)。是否有一种方法来检查和改变一个文件或文件夹的访问模式对Github回购?

下面是关于这个错误的日志:

[ERROR] 2023-01-12T17:19:33.931Z    63bacb5b-ec13-4247-b784-9aaba99376a0
Exception on /register [POST]Traceback (most recent call last):
File "/var/task/sqlalchemy/engine/base.py", line 1900, in _execute_context    self.dialect.do_execute
(  File "/var/task/sqlalchemy/engine/default.py", line 736, in do_execute    cursor.execute(statement, parameters)
sqlite3.OperationalError: attempt to write a readonly database
The above exception was the direct cause of the following exception:
Traceback (most recent call last):  File "/var/task/flask/app.py", line 2525, in wsgi_app    response = self.full_dispatch_request()  File "/var/task/flask/app.py", line 1822, in full_dispatch_request    rv = self.handle_user_exception(e)  File "/var/task/flask/app.py", line 1820, in full_dispatch_request    rv = self.dispatch_request()  File "/var/task/flask/app.py", line 1796, in dispatch_request    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  File "./app.py", line 136, in register    db.session.commit()  
File "<string>", line 2, in commit  File "/var/task/sqlalchemy/orm/session.py", line 1451, in commit    self._transaction.commit(_to_root=self.future)  File "/var/task/sqlalchemy/orm/session.py", line 829, in commit    self._prepare_impl()  File "/var/task/sqlalchemy/orm/session.py", line 808, in _prepare_impl    self.session.flush()  File "/var/task/sqlalchemy/orm/session.py", line 3444, in flush    self._flush(objects)  File "/var/task/sqlalchemy/orm/session.py", line 3584, in _flush    transaction.rollback(_capture_exception=True)  File "/var/task/sqlalchemy/util/langhelpers.py", line 70, in __exit__    compat.raise_(  File "/var/task/sqlalchemy/util/compat.py", line 211, in raise_    raise exception  File "/var/task/sqlalchemy/orm/session.py", line 3544, in _flush    flush_context.execute()  File "/var/task/sqlalchemy/orm/unitofwork.py", line 456, in execute    rec.execute(self)  File "/var/task/sqlalchemy/orm/unitofwork.py", line 630, in execute    util.preloaded.orm_persistence.save_obj(  File "/var/task/sqlalchemy/orm/persistence.py", line 245, in save_obj    _emit_insert_statements(  File "/var/task/sqlalchemy/orm/persistence.py", line 1238, in _emit_insert_statements    result = connection._execute_20(  File "/var/task/sqlalchemy/engine/base.py", line 1705, in _execute_20    return meth(self, args_10style, kwargs_10style, execution_options)  File "/var/task/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection    return connection._execute_clauseelement(  File "/var/task/sqlalchemy/engine/base.py", line 1572, in _execute_clauseelement    ret = self._execute_context(  File "/var/task/sqlalchemy/engine/base.py", line 1943, in _execute_context    self._handle_dbapi_exception(  File "/var/task/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception    util.raise_(  File "/var/task/sqlalchemy/util/compat.py", line 211, in raise_    raise exception  File "/var/task/sqlalchemy/engine/base.py", line 1900, in _execute_context    self.dialect.do_execute(  File "/var/task/sqlalchemy/engine/default.py", line 736, in do_execute    cursor.execute(statement, parameters)sqlalchemy.exc.
OperationalError: (sqlite3.OperationalError) attempt to write a readonly database

我以User和Admin双重身份检查了本地系统中DB的访问模式

原来Vercel不支持SQLite。他们的指南里清楚地写着:

SQLite需要服务器上的本地文件系统来存储数据当发出写请求时永久的。在无服务器环境中,这种中央单一永久存储器是不可用的,因为存储器使用无服务器函数是短暂的。

所以这不是只读模式的问题,而是Vercel上的SQL数据库的问题。

相关内容

最新更新