Man*_*lue 7 python apache ubuntu mod-wsgi flask
我在Ubuntu服务器上使用mod_wsgi和运行FlaskApp apache2.我尝试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其所有者用户名和组.
我试过谷歌搜索,但没有适当的解决方案,除了建议更改文件/目录权限,我自己尝试过.
为什么不能读取/访问数据库文件?
请建议.
解决了这个问题.这是由于数据库文件权限冲突造成的.
此问题与文件权限管理有关,主要与在*.conf定义为保存应用程序进程的 Apache 配置文件 ( ) 中选择的用户有关。简而言之:写权限需要与此用户匹配。
大多数情况下,sqlite 数据库文件是由特定用户(例如您的当前用户)创建的,并且站点应用程序在 Apache 默认用户www-data启动的子进程下运行(如果user未在其中指定参数)指令WSGIDaemonProcess)。在这种情况下,可以读取数据库,但如果您尝试修改任何内容,它将抛出此错误:
(OperationalError) 尝试写一个只读数据库...
因为www-data对该文件(或父文件夹)没有权限
第一种方式:对用户 www-data 应用权限
您可以设置对数据库文件及其父文件夹的写入权限。
如果文件夹包含其他文件,您可以对其添加写权限,并将数据库文件的所有权更改为用户www-data,例如:
sudo chmod o+w db_directory
sudo chown www-data: db_directory/site_database.db
Run Code Online (Sandbox Code Playgroud)
或者如果文件夹只包含数据库文件,您可以尝试直接更改文件夹所有者:
sudo chown -R www-data: db_directory
Run Code Online (Sandbox Code Playgroud)
然后检查读/写权限是否设置好(使用ls -l site_database.db)
其他解决方案:添加一个特定用户来保存应用程序进程
这可以通过在 Apache 配置中的指令中提供user和group参数来完成WSGIDaemonProcess。它将使 Apache 在特定用户下启动子进程。
例如 :
...
WSGIDaemonProcess main user=myuser group=myuser threads=3 python-home=/path/to/the/virtualenv/
WSGIProcessGroup main
WSGIApplicationGroup %{GLOBAL}
...
Run Code Online (Sandbox Code Playgroud)
该用户将管理所有操作,包括对任何文件的读/写,因此请检查它是否对每个相关文件具有所有所需的权限。
出于安全考虑,您可能不会使用具有广泛权限的用户。
一些评论可以帮助这篇文章。
注意:如果您使用ErrorLogApache 配置中的指令管理自己的日志文件,请小心,这些文件将遵循相同的权限逻辑。对于可由应用程序更改的任何文件也是如此。
| 归档时间: |
|
| 查看次数: |
10386 次 |
| 最近记录: |