Usando mi aplicación Django, puedo leer bien de la base de datos. Cuando la aplicación no tenía permiso para acceder al archivo, me dio este error:
intenta escribir una base de datos de solo lectura
Lo cual tenía sentido. Así que edité los permisos en el archivo, para que el proceso de Apache tuviera permisos de escritura. Sin embargo, en lugar de poder escribir, me sale este error críptico:
no se puede abrir el archivo de base de datos
Si es útil, aquí está el resultado completo:
Request Method: POST
Request URL: http://home-sv-1/hellodjango1/polls/1/vote/
Exception Type: OperationalError
Exception Value:
unable to open database file
Exception Location: /usr/lib/pymodules/python2.5/django/db/backends/sqlite3/base.py in execute, line 193
Python Executable: /usr/bin/python
Python Version: 2.5.2
Python Path: ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0']
Server time: Sun, 23 Aug 2009 07:06:08 -0500
Avíseme si es necesario un seguimiento de pila.
Respuestas:
Ajá, me topé con un artículo que explica esto. También Django tiene información en su página NewbieMistakes .
La solución es asegurarse de que el directorio que contiene el archivo de la base de datos también tenga acceso de escritura permitido al proceso.
En mi caso, ejecutar este comando solucionó el problema:
fuente
chown www-data. .
realidad debería ser dechown www-data .
otra manera, hay algún mago de comando chown que no conozco ... por favor, ilumíneme.Mi solución a esto fue más o menos así. Realmente no quería cambiar la propiedad de este directorio. (principalmente porque uso el usuario pi para hacer cosas como git)
(o lo que sea que estés usando)
donde pi es el usuario en el que creé todos los archivos. (sí, este es un raspberry pi)
En lugar de cambiar los permisos a www-data, descubrí que solo necesitaba cambiar los permisos de esta manera:
Esto proporciona acceso de escritura grupal a los archivos necesarios y agrega el usuario www-data al grupo pi.
Nota: si tiene un registro, deberá hacer esto también para el archivo de registro de django o apache no le gustará mucho.
fuente
Desde el Django dice "No se puede abrir el archivo de base de datos" cuando se usa la sección SQLite3 de la página wiki de Django de errores de novato :
db
que exista la ruta completa del directorio/tmp
directorio sea de escritura mundialsettings.py
es una ruta completafuente
Agregar un usuario operativo al grupo www-data está funcionando bien en mi entorno de prueba. Además, puse el archivo sqlite3.db en una subcarpeta separada , para ser más seguro.
El archivo de la base de datos será propiedad de www-data
Mi usuario operativo hape obtiene un miembro del grupo www-data:
Permitir el acceso de escritura del archivo de base de datos a los miembros del grupo www-data:
Como resultado, se puede acceder a la base de datos de lectura + escritura mediante apache2-daemon (usuario www-data), sin otorgar la concesión a la carpeta raíz del proyecto y, por otro lado, la aplicación puede ejecutarse en modo dev usuario hape, por ejemplo
además.
fuente
Tomado de la pregunta SO: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Suponiendo que los archivos son propiedad del usuario de apache para comenzar:
configurado
ACLs
para usuario / grupo pi:Puedes ver que hay un
ACL
conls -l
, el '+' final en los bits de permisos:fuente
Para Windows 7, 8.1, 10, Server 2012, etc., siga las instrucciones de instalación de Bonobo :
Permita que el usuario de IIS modifique la carpeta C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Para hacerlo:
fuente
El servidor de desarrollo debe ejecutarse como el mismo usuario que tiene permisos de escritura en la carpeta de la base de datos, por lo que si originalmente creó la base de datos como root, deberá ser root cuando ejecute:
fuente
root
es una horrible idea - Sería mejor achown
la base de datos para el usuario sin privilegios regular que normalmente se ejecuta el servidor ...crear un subdirectorio en el directorio de trabajo
crear una base de datos sqlite en el subdirectorio
cambiar el propietario del subdirectorio a www-data en debain o apache en centOS
y toma una cerveza fría porque estás listo.
P / S: para verificar si el procedimiento fue exitoso
deberías ver tal
fuente
solo escribe
sudo sqlite3 databaseFilename.sql
y es trabajofuente