72 votos

¿Por qué obtengo sqlite error, "no se puede abrir el archivo de base de datos"?

Utilizando mi aplicación de Django, soy capaz de leer de la base de datos bien. Cuando la aplicación no tiene permiso para acceder al archivo, me dio este error:

intento de escribir una de sólo lectura de la base de datos

Que tenía sentido. Así que he editado los permisos en el archivo, de modo que el proceso de Apache tenía permisos de escritura. Sin embargo, en lugar de ser capaz de escribir, me sale este críptico de error:

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

Déjeme saber si una traza de la pila es necesario.

87voto

nbolton Puntos 1937

Aha, tropecé a través de un artículo explicando esto. También Django tienen información sobre sus NewbieMistakes página.

La solución es asegurarse de que el directorio que contiene el archivo de base de datos también tiene acceso de escritura permite el proceso.

En mi caso, la ejecución de este comando se ha solucionado el problema:

chown www-data. .

7voto

Andrew Moore Puntos 49765

7voto

SpiRail Puntos 121

Mi solución a esto fue más como tal. Yo realmente no quería cambiar la propiedad de esta dir. (sobre todo porque yo uso las instrucciones de usuario para hacer cosas como git)

/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db

(o lo que sea db)

donde pi es el usuario que he creado a todos los archivos. (sí, esta es una raspberry pi)

En lugar de cambiar de permisos a www-data, me encontré con que sólo he tenido que cambiar los permisos como este:

sudo chmod 775 /var/www/mysite
sudo chmod 664 /var/www/mysite/sqlite.db
sudo usermod -a -G pi www-data

Este grupo da acceso de escritura a los archivos necesarios y agrega la www-data usuario a la pi de grupo.

Nota: si usted tiene registro, usted tendrá que hacer esto para el django logfile así apache o no guste mucho.

5voto

Hartmut Puntos 131

La adición de un usuario operativas para la www-data group está trabajando bien en mi entorno de prueba. Además he puesto la de sqlite3.archivo de base de datos en una subcarpeta, para ser más seguro.

Archivo de base de datos serán propiedad de www-data

sudo chown www-data mysite/db_sqlite3/
sudo chown www-data mysite/db_sqlite3/my.db

Mi usuario operativas epa consigue un miembro de www-data group:

sudo usermod -a -G www-data hape

Permitir el archivo de base de datos el acceso de escritura a los miembros del grupo www-data:

sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db

Como resultado, la base de datos se puede acceder lectura+escritura por apache2-daemon (usuario www-data), sin dar subvención a la carpeta root del proyecto, y - por otro lado - la aplicación se puede ejecutar en dev modo por la operativa del usuario de la epa, por ejemplo,

./manage.py runserver

también.

0voto

Kilizo Puntos 111

El servidor de desarrollo necesita ser ejecutado como el mismo usuario que tiene permisos de escritura permanentes en la carpeta de base de datos, así que si usted originalmente creado la base de datos como root, tendrá que ser root cuando se ejecute:

python manage.py runserver

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: