sqlite - 如何在 SourceForge 项目的 Web 空间中写入 SQLite 数据库文件?

标签 sqlite sourceforge

我有一个基于 Perl 的小型 CGI 应用程序,我在为 SourceForge 项目提供的项目 Web 空间中运行它。此应用程序将数据存储在 SQLite (v. 3) 数据库文件中。

当我从 shell 运行测试脚本时,我可以读取和写入这个 SQLite 文件。但是,当 CGI 代码由 Apache 执行时,它具有只读访问权限。写操作导致日志文件错误:

error.log.web-2:[Wed Oct 27 14:40:22 2010] [error] [client 127.0.0.1] DBD::SQLite::db do failed: unable to open database file

出于测试目的,我将该 SQLite 文件的权限一直提高到 777。没有区别。

然而,SourceForge 的项目网络空间有一些有趣的警告,我想知道我是否被绊倒了。通常,主 Web 服务器文件系统对 Apache 是只读的。如果您有需要在运行时可写的文件,您应该将它们存储在其他地方的特殊“持久”目录中......并从您的网络空间创建符号链接(symbolic link)到该目录下的实际文件。

我已经这样做了,并且“持久性”位置下的符号链接(symbolic link)和实际 SQLite 文件的权限都设置为 777。我知道这种机制通常是有效的,因为我对缓存和日志文件做同样的事情,它在那里工作。

我想知道 SQLite 本身是否有什么奇怪的地方,就像它不想打开符号链接(symbolic link)(而不是原始文件)进行编写一样。

最佳答案

我相信这个问题的答案是做不到。对 SQLite 的进一步研究告诉我,驱动程序必须先锁定数据库文件,然后才能执行任何写入操作。当实际文件位于另一台机器上且其文件系统交叉挂载时,无法获得这种类型的锁。

我相信 SourceForge 项目网络空间托管就是这种情况。看起来(可写的)“持久”目录实际上位于与只读 Web 服务器文件系统完全不同的机器上。

简而言之,如果您因为遇到同样的问题而偶然发现这个问题......要么寻找不同的网络空间托管,要么是时候重新设计您的应用程序并升级到 MySQL 或其他一些数据库( SourceForge 无论如何都会为您提供免费的 MySQL 托管)。

关于sqlite - 如何在 SourceForge 项目的 Web 空间中写入 SQLite 数据库文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035032/

相关文章:

ios - CoreData 限制相关实体的批量大小

android - IllegalArgumentException : the bind value at index 1 is null

android - 如何判断android rawQuery更新成功?

apache - 另一个 mod_rewrite 尾部斜线问题

android - 是否有 Android 的 SourceForge 网站?

sqlite - WHERE - NULL 在 SQLite 中不起作用吗?

"?"附近的 Python SQLite : syntax error

mysql - 在 Netbeans 中连接到 Sourceforge.net MySQL 数据库

python - 对首次 sourceforge 项目贡献者的建议?

git - 来源: "... does not appear to be a git repository"