Menggunakan aplikasi Django saya, 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 tersebut, 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.
Jawaban:
Aha, baru saja menemukan artikel yang menjelaskan hal ini. Juga Django punya info di 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:
sumber
chown www-data. .
sebenarnya haruschown www-data .
ada kalau tidak ada beberapa perintah chown yang tidak saya ketahui ... tolong beri tahu saya.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)
(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:
Ini memberi akses tulis grup ke file yang diperlukan dan menambahkan pengguna data-www ke grup pi.
Catatan: jika Anda telah login, Anda perlu melakukan ini juga untuk file log django atau apache tidak akan menyukainya.
sumber
Dari Django mengatakan "Tidak dapat Buka File Database" ketika menggunakan SQLite3 bagian dari kesalahan Newbie wiki Django halaman :
db
direktori tersebut ada/tmp
direktori Anda bisa ditulis oleh duniasettings.py
adalah path lengkapsumber
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 terpisah , agar lebih aman.
File basis data harus dimiliki oleh www-data
Hape pengguna operasional saya mendapat anggota grup data-www:
Izinkan akses tulis file database ke anggota grup www-data:
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
juga.
sumber
Dipinjam dari pertanyaan SO: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Dengan asumsi file dimiliki oleh pengguna apache untuk memulai:
ditetapkan
ACLs
untuk pi pengguna / grup:Anda dapat mengetahui ada tanda
ACL
withls -l
, '+' pada bit izin:sumber
Untuk Windows 7, 8.1, 10, Server 2012, dll. Ikuti petunjuk instalasi Bonobo :
Izinkan Pengguna IIS untuk memodifikasi folder C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Untuk melakukannya:
sumber
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:
sumber
root
adalah mengerikan ide - Akan lebih baik untukchown
database ke user biasa biasa yang biasanya berjalan server ...buat subdirektori di direktori kerja
buat database sqlite di subdirektori
ubah pemilik untuk subdirektori ke www-data dalam debain atau apache dalam centOS
dan ambil bir dingin karena Anda sudah selesai.
P / S: untuk memeriksa apakah prosedurnya berhasil
Anda harus melihat itu
sumber
hanya menulis
sudo sqlite3 databaseFilename.sql
dan itu berhasilsumber