操作错误:尝试在 ubuntu 服务器中写入只读数据库

2024-05-14

我正在使用 FlaskApp 运行mod_wsgi and apache2在 Ubuntu 服务器上。我尝试运行烧瓶应用程序localhost成功,然后部署到ubuntu服务器上。

但是当我尝试更新数据库时,出现错误:

Failed to update model. (OperationalError) attempt to write a readonly database u'UPDATE mysongs SET songurl=? WHERE songid.id = ?' (u'www.site.com/I_wanna_dance', 1)

现在我尝试查找数据库文件权限,即:

-rwxr-xr-x 1 www-data www-data 10240 Jul 14 15:35 /var/www/mywebsite/appfolder/appdata.db`

当我尝试将权限更改为 777、755、644 等时,它显示另一个错误:unable to open database file尽管数据库文件在 644 权限下工作正常localhost但不在 ubuntu 服务器上。

我还检查了目录的权限和/var /var/www /var/www/mywebsite /var/www/mywebsite/appfolder等等,都有www-data:www-data作为其所有者用户名和组。

我尝试过谷歌搜索,但除了建议更改文件/目录权限之外没有正确的解决方案,我自己也尝试过。

为什么它无法读取/访问数据库文件?

请建议。


此问题与文件权限管理有关,主要与 Apache 配置文件中选择的用户有关(*.conf)定义为保存应用程序进程。简而言之:写权限需要匹配该用户。

大多数时候,sqlite 数据库文件是由特定用户(例如您当前的用户)创建的,并且站点应用程序在 Apache 默认用户启动的子进程下运行www-data(如果参数user指令中未指定WSGIDaemonProcess)。在这种情况下,可以读取数据库,但如果您尝试修改任何内容,则会抛出此错误:

(操作错误)尝试写入只读数据库...

because www-data对文件(或父文件夹)没有权限


第一种方式:向用户 www-data 申请权限

您可以设置write对数据库文件及其父文件夹的权限。

如果该文件夹包含其他文件,可以为其添加写权限,仅将数据库文件的所有权更改为用户www-data, 例如 :

sudo chmod o+w db_directory
sudo chown www-data:  db_directory/site_database.db 

或者,如果该文件夹仅包含数据库文件,您可以尝试直接更改文件夹所有者:

sudo chown -R www-data: db_directory

然后检查一下read/write权限设置得很好(ls -l site_database.db)

更多帮助这个帖子。 https://askubuntu.com/questions/6723/change-folder-permissions-and-ownership


其他解决方案:添加特定用户来保存应用程序进程

这可以通过给出user and group参数 http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html在指令中WSGIDaemonProcess在 Apache 配置中。 它将使 Apache 在特定用户下启动子进程。

例如 :

...
WSGIDaemonProcess main user=myuser group=myuser threads=3 python-home=/path/to/the/virtualenv/
WSGIProcessGroup main
WSGIApplicationGroup %{GLOBAL}
...

该用户将管理所有操作,包括对任何文件的读/写,因此请检查它是否对每个相关文件拥有所有所需的权限。

出于安全考虑,您不得使用具有广泛权限的用户。

一些评论可以帮助这个帖子 https://serverfault.com/questions/294101/wsgidaemonprocess-specifying-a-user.


Note:如果您使用以下指令管理自己的日志文件,请小心ErrorLog在Apache配置中,这些文件将遵循相同的权限逻辑。对于应用程序可以更改的任何文件也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作错误:尝试在 ubuntu 服务器中写入只读数据库 的相关文章

  • Pygame 让精灵按照给定的旋转行走

    很久以前我做了一个Scratch脚本 我想用Pygame将其转换为Python 有很多示例显示图像的旋转 但我想知道如何更改精灵的旋转以使其沿给定方向移动 而不更改图像 这是我的暂存代码 这是我的 Pygame 精灵类 class Star
  • Seaborn regplot 中点和线的不同颜色

    中列出的所有示例西伯恩的regplot文档 https seaborn pydata org generated seaborn regplot html点和回归线显示相同的颜色 改变color争论改变了两者 如何为点设置与线不同的颜色 你
  • 更改 numpy 数组的结构强制给定值

    如何缩小栅格数据的比例4 X 6大小成2 X 3如果 2 2 像素内的任何元素包含 1 则大小强制选择 1 否则选择 0 import numpy as np data np array 0 0 1 1 0 0 1 0 0 1 0 0 1
  • Scrapy Splash,如何处理onclick?

    我正在尝试抓取以下内容 我能够收到响应 但我不知道如何访问以下项目的内部数据以抓取它 我注意到访问这些项目实际上是由 JavaScript 和分页处理的 这种情况我该怎么办 下面是我的代码 import scrapy from scrapy
  • 在Python中清理属于不同语言的文本

    我有一个文本集合 其中的句子要么完全是英语 印地语或马拉地语 每个句子附加的 id 为 0 1 2 分别代表文本的语言 无论任何语言的文本都可能有 HTML 标签 标点符号等 我可以使用下面的代码清理英语句子 import HTMLPars
  • Python ElementTree 获取带有命名空间的属性

    我试图访问 XML 中的 def 所以在这个例子中我会得到Evolus Common PlainTextV2作为输出 我似乎无法弄清楚如何获取具有名称空间的属性 如果我想得到id它工作得很好 Python for content ns in
  • 从 Spark 数据帧中过滤大量 ID

    我有一个大型数据框 其格式类似于 ID Cat date 12 A 201602 14 B 201601 19 A 201608 12 F 201605 11 G 201603 我需要根据大约 500 万个 Is 的列表来过滤行 最直接的方
  • 如何解决CDK CLI版本不匹配的问题

    我收到以下错误 此 CDK CLI 与您的应用程序使用的 CDK 库不兼容 请将CLI升级到最新版本 云程序集架构版本不匹配 支持的最大架构版本为 8 0 0 但发现为 9 0 0 发出后cdk diff命令 我确实跑了npm instal
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • 为什么在 __init__ 函数中声明描述符类会破坏描述符功能?

    在下面的 B 类中 我想要 set 每当您赋值给 A 类中的函数时 就会调用该函数B a 相反 将值设置为B a覆盖B a与价值 C类分配给C a工作正常 但我想为每个用户类都有一个单独的 A 实例 即我不想在 C 的一个实例中更改 a 来
  • 检查列表是否已排序的 Pythonic 方法

    有没有一种Python式的方法来检查列表是否已经排序ASC or DESC listtimestamps 1 2 3 5 6 7 就像是isttimestamps isSorted 返回True or False 我想输入一些消息的时间戳列
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • 如何不断地将 STDOUT 发送到我的 python TCP 服务器?

    我有简单的 python echo 服务器 它使用套接字 并向客户端回显随机数 我有另一个程序 每 2 秒将值打印到标准输出 如果它只是一个脚本 我可以像这样重定向 stdout python script py 并像这样在脚本中获取它da
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • Django - 使 ModelForm(ImageField 的)仅接受某些类型的图像

    我将 Pillow 2 3 0 与 Django 一起使用 并且在 models py 中有一个 ImageField 如下所示 class UserImages models Model user models ForeignKey Us
  • Python Tkinter 网格复选框

    我想知道是否有一种简单的方法可以使用 Tkinter 创建复选框网格 我正在尝试制作一个由 10 行和 10 列 即 100 个复选框 组成的网格 以便每行只能选择两个复选框 编辑 我正在使用带有spyder的python 2 7 到目前为
  • 如何正确将 tflite_graph.pb 转换为 detector.tflite

    我正在使用tensorflow对象检测API使用tensorflow中的ssdlite mobilenet v2 coco 2018 05 09来训练自定义模型模型动物园 https github com tensorflow models
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我
  • Pandas 2 个字段中唯一值的数量

    我正在尝试查找覆盖 2 个字段的唯一值的数量 例如 一个典型的例子是姓氏和名字 我有一个数据框 当我执行以下操作时 我只获取每列的唯一字段数 在本例中为 最后一个 和 第一个 不是复合体 df Last Name First Name nu
  • 如何从Python枚举类中获取所有值?

    我正在使用 Enum4 库创建一个枚举类 如下所示 class Color Enum RED 1 BLUE 2 我要打印 1 2 作为某处的列表 我怎样才能实现这个目标 您可以执行以下操作 e value for e in Color

随机推荐