sviluppo-web-qa.it

Perché visualizzo l'errore sqlite, "impossibile aprire il file di database"?

Usando la mia Django, sono in grado di leggere bene dal database. Quando l'applicazione non aveva il permesso di accedere al file, mi ha dato questo errore:

tenta di scrivere un database di sola lettura

Il che aveva senso. Quindi ho modificato i permessi sul file, in modo che il processo Apache avesse i permessi di scrittura. Tuttavia, invece di poter scrivere, ottengo questo errore criptico:

impossibile aprire il file di database

Se è utile, ecco l'intero output:

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

Fammi sapere se è necessaria una traccia dello stack.

65
Nick Bolton

Ah, mi sono imbattuto in n articolo spiegando questo. Inoltre Django ha informazioni sulla sua pagina NewbieMistakes .

La soluzione è assicurarsi che anche la directory contenente il file di database abbia accesso in scrittura al processo.

Nel mio caso, l'esecuzione di questo comando ha risolto il problema:

Sudo chown www-data .
80
Nick Bolton

La mia soluzione a questo è stata più simile. Non volevo davvero cambiare la proprietà di questa directory. (principalmente perché uso l'utente pi per fare cose come git)

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

(o qualunque db stai usando)

dove pi è l'utente in cui ho creato tutti i file. (sì, questo è un Raspberry Pi)

Invece di cambiare le autorizzazioni in www-data, ho scoperto che avevo solo bisogno di cambiare le autorizzazioni in questo modo:

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

Ciò consente al gruppo l'accesso in scrittura ai file necessari e aggiunge l'utente www-data al gruppo pi.

Nota: se hai la registrazione, dovrai farlo per il Django o Apache non apprezzerà molto.

7
SpiRail

Dal Django dice "Impossibile aprire il file di database" quando si utilizza SQLite3 sezione del Errori per principianti Django wiki pagina :

  1. assicurarsi che Apache possa anche scrivere nella directory principale del database
  2. assicurarsi che nessuna delle cartelle del percorso completo del file di database inizi con un numero
  3. assicurarsi che esista il percorso completo della directory db
  4. assicurati che il tuo /tmp directory è scrivibile dal mondo
  5. assicurarsi che il percorso del database specificato in settings.py è un percorso completo
  6. assicurati che non ci siano caratteri speciali nel percorso
  7. su Windows, assicurarsi che il percorso della directory db sia scritto con doppi giochi
7
ssc

L'aggiunta di un utente operativo al gruppo www-data funziona bene nel mio ambiente di test. Inoltre ho inserito il file sqlite3.db in una sottocartella separata , per essere più sicuro.

Il file di database deve essere di proprietà di www-data

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

La mia hape utente operativa ottiene un membro del gruppo www-data:

Sudo usermod -a -G www-data hape

Consentire l'accesso in scrittura al file di database ai membri dei dati www del gruppo:

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

Di conseguenza, è possibile accedere al database read + write da Apache2-daemon (dati www utente), senza concedere la cartella principale del progetto e, d'altra parte, l'app può essere eseguita in modalità dev dal operativo utente hape, ad es.

./manage.py runserver

anche.

5
Hartmut P.

Preso in prestito da SO: https://stackoverflow.com/questions/4283132/Apache-instance-user-permission-issue

Supponendo che i file siano di proprietà dell'utente Apache per iniziare:

% chown -R Apache.apache /var/www/mysite

imposta ACLs per utente/gruppo pi:

% setfacl -d -m u:pi:rwx /var/www/mysite
% setfacl -d -m g:pi:rwx /var/www/mysite

% getfacl /var/www/mysite
# file: /var/www/mysite
# owner: Apache
# group: Apache
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:pi:rwx
default:group::r-x
default:group:pi:rwx
default:mask::rwx
default:other::r-x

Puoi dire che c'è un ACL con ls -l, il '+' finale sui bit delle autorizzazioni:

# ls -la /var/www
drwxr-xr-x   3 Apache   Apache   80 26. Nov 12:43 .
drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
drwxrwxr-x+  2 Apache   Apache   40 26. Nov 12:43 mysite
1
slm

La soluzione è assicurarsi che anche la directory contenente il file di database abbia accesso in scrittura al processo.

Per Windows 7, 8.1, 10, Server 2012, ecc. Seguire le istruzioni Istruzioni per l'installazione di Bonobo :

Permetti IIS L'utente può modificare la cartella C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data.

Fare così:

  1. seleziona Proprietà della cartella App_Data,
  2. vai alla scheda Sicurezza,
  3. fai clic su modifica,
  4. seleziona IIS (nel mio caso IIS_IUSRS) e aggiungi l'autorizzazione Modifica e Scrivi,
  5. confermare queste impostazioni con il pulsante Applica.
1
DEXTER360

Il server di sviluppo deve essere eseguito come lo stesso utente che ha scritto i permessi nella cartella del database, quindi se originariamente hai creato il database come root, dovrai essere root quando esegui:

python manage.py runserver
0
Kilizo

crea una sottodirectory nella directory di lavoro

mkdir db-folder 

crea un database sqlite nella sottodirectory

sqlite3 db-folder/db.db

cambia proprietario per la sottodirectory in www-data in debain o Apache in centOS

chown -R www-data db-folder

e prendi una birra fredda perché hai finito.

P/S: per verificare se la procedura è andata a buon fine

ls -l data-folder

dovresti vederlo

-rw-r--r-- 2 www-data root 4096 Jun 18 01:38 data-folder
0
brotich