操作错误:尝试在 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 服务器中写入只读数据库 的相关文章

  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo

随机推荐