pengembangan-web-mp.com

Mengapa saya mendapatkan kesalahan sqlite, "tidak dapat membuka file database"?

Menggunakan aplikasi saya Django, saya bisa membaca dari database dengan baik. Ketika aplikasi tidak memiliki izin untuk mengakses file, itu memberi saya kesalahan ini:

mencoba untuk menulis database hanya baca

Itu masuk akal. Jadi saya mengedit izin pada file, sehingga proses Apache memiliki izin menulis. Namun, alih-alih bisa menulis, saya mendapatkan kesalahan samar ini:

tidak dapat membuka file database

Jika ini berguna, inilah keseluruhan hasilnya:

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

Beri tahu saya jika ada jejak stack yang diperlukan.

65
Nick Bolton

Aha, baru saja menemukan sebuah artikel menjelaskan ini. Juga Django punya info tentang halaman NewbieMistakes mereka.

Solusinya adalah memastikan direktori yang berisi file database juga memiliki akses tulis yang diizinkan untuk proses.

Dalam kasus saya, menjalankan perintah ini memperbaiki masalah:

Sudo chown www-data .
80
Nick Bolton

Solusi saya untuk ini lebih seperti itu. Saya tidak benar-benar ingin mengubah kepemilikan dir ini. (kebanyakan karena saya menggunakan pengguna pi untuk melakukan hal-hal seperti git)

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

(atau db apa pun yang Anda gunakan)

di mana pi adalah pengguna yang saya buat semua file masuk (ya ini adalah Raspberry Pi)

Alih-alih mengubah izin menjadi www-data, saya menemukan bahwa saya hanya perlu mengubah izin seperti ini:

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

Ini memberikan akses tulis grup ke file yang diperlukan dan menambahkan pengguna data-www ke grup pi.

Catatan: jika Anda telah login, Anda harus melakukan ini untuk logfile Django juga atau Apache tidak akan menyukainya.

7
SpiRail

Dari Django mengatakan "Tidak Dapat Membuka File Database" saat menggunakan SQLite3 bagian dari Kesalahan pemula Django wiki halaman :

  1. pastikan Apache juga dapat menulis ke direktori induk dari database
  2. pastikan tidak ada folder dari path lengkap file database dimulai dengan angka
  3. pastikan path lengkap direktori db memang ada
  4. pastikan /tmp direktori dapat ditulis oleh dunia
  5. pastikan path ke database yang ditentukan dalam settings.py adalah path lengkap
  6. pastikan tidak ada karakter khusus di jalur
  7. pada Windows, pastikan jalur direktori db ditulis dengan serangan balik ganda
7
ssc

Menambahkan pengguna operasional ke grup data-www berfungsi dengan baik di lingkungan pengujian saya. Selain itu saya telah memasukkan file sqlite3.db ke dalam subfolder yang terpisah , agar lebih aman.

File database harus dimiliki oleh www-data

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

Hape pengguna operasional saya mendapat anggota grup data-www:

Sudo usermod -a -G www-data hape

Izinkan akses menulis file database ke anggota grup 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

Akibatnya, database dapat diakses baca + tulis oleh Apache2-daemon (pengguna www-data), tanpa memberikan hibah ke folder root proyek, dan - di sisi lain - aplikasi dapat dijalankan dalam mode dev oleh operasional pengguna hape, mis.

./manage.py runserver

juga.

5
Hartmut P.

Dipinjam dari SO pertanyaan: https://stackoverflow.com/questions/4283132/Apache-instance-user-permission-issue

Dengan asumsi file dimiliki oleh pengguna Apache untuk memulai:

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

set ACLs untuk pi pengguna/grup:

% 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

Anda bisa tahu ada ACL dengan ls -l, trailing '+' pada bit izin:

# 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

Solusinya adalah memastikan direktori yang berisi file database juga memiliki akses tulis yang diizinkan untuk proses.

Untuk Windows 7, 8.1, 10, Server 2012, dll. Ikuti petunjuk instalasi Bonobo :

Izinkan IIS Pengguna untuk memodifikasi C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data folder.

Untuk melakukannya:

  1. pilih Properties dari folder App_Data,
  2. pergi ke tab Security,
  3. klik edit,
  4. pilih IIS pengguna (dalam kasus saya IIS_IUSRS) dan tambahkan Modifikasi dan Tulis izin,
  5. konfirmasi pengaturan ini dengan tombol Terapkan.
1
DEXTER360

Server pengembangan harus dijalankan sebagai pengguna yang sama yang memiliki izin menulis pada folder basis data, jadi jika Anda awalnya membuat basis data sebagai root, Anda harus melakukan root ketika menjalankan:

python manage.py runserver
0
Kilizo

buat subdirektori di direktori kerja

mkdir db-folder 

buat database sqlite di subdiretory

sqlite3 db-folder/db.db

ganti pemilik untuk subdirektori ke www-data dalam debain atau Apache dalam centOS

chown -R www-data db-folder

dan ambil bir dingin karena Anda sudah selesai.

P/S: untuk memeriksa apakah prosedurnya berhasil

ls -l data-folder

anda harus melihat itu

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