Django app kullanarak, veritabanından iyi okuyabiliyorum. Uygulama dosyaya erişim izni olmadığında, bana bu hatayı verdi:
salt okunur bir veritabanı yazmaya çalışın
Hangi mantıklı. Bu yüzden dosyadaki izinleri düzenledim, böylece Apache işleminin yazma izinleri vardı. Ancak, yazabilmek yerine, bu şifreli hatayı alıyorum:
veritabanı dosyası açılamıyor
Yararlıysa, tüm çıktı:
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
Yığın izinin gerekli olup olmadığını bana bildirin.
Aha, sadece tökezledi bir makale bunu açıklıyor. Ayrıca Django NewbieMistakes sayfasında bilgi var.
Çözüm, veritabanı dosyasını içeren dizinin işlem için yazma erişimine de sahip olduğundan emin olmaktır.
Benim durumumda, bu komutu çalıştırmak sorunu çözdü:
Sudo chown www-data .
Buna benim çözümüm daha çok böyleydi. Ben gerçekten bu dir sahipliğini değiştirmek istemiyordu. (çoğunlukla git gibi şeyler yapmak için pi kullanıcı kullanın çünkü)
/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi pi 25600 Jan 2 22:57 sqlite.db
(veya hangi db'yi kullanırsanız kullanın)
burada pi tüm dosyaları oluşturduğum kullanıcı. (evet bu bir Raspberry Pi)
Www-data izinlerini değiştirmek yerine, ben sadece bu gibi izinleri değiştirmek için gerekli bulundu:
Sudo chmod 775 /var/www/mysite
Sudo chmod 664 /var/www/mysite/sqlite.db
Sudo usermod -a -G pi www-data
Bu, gruplara gerekli dosyalara yazma erişimi sağlar ve www-data kullanıcısını pi grubuna ekler.
Not: Günlüğe kaydetme işleminiz varsa, bunu Django günlük dosyası için de yapmanız gerekir, yoksa Apache çok beğenmez).
Django, SQLite3 bölüm Yeni başlayanlar hataları Django wiki sayfa :
db
dizininin tam yolunun mevcut olduğundan emin olun/tmp
dizininizin dünya çapında yazılabilir olduğundan emin olunsettings.py
içinde belirtilen veritabanının yolunun tam yol olduğundan emin olunWww-data grubuna operasyonel bir kullanıcı eklemek test ortamımda iyi çalışıyor. Ayrıca daha güvenli olması için sqlite3.db dosyasını ayrı bir alt klasör içine koydum.
Veritabanı dosyası www-data'ya ait olacaktır
Sudo chown www-data mysite/db_sqlite3/
Sudo chown www-data mysite/db_sqlite3/my.db
Operasyonel kullanıcı hape'im www-data grubunun bir üyesini alıyor:
Sudo usermod -a -G www-data hape
Www-data grubu üyelerine veritabanı dosyası yazma erişimine izin ver:
Sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
Sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db
Sonuç olarak, veritabanına proje kök klasörüne izin vermeden Apache2-daemon (kullanıcı www-verileri) tarafından okuma ve yazma işlemlerine erişilebilir ve diğer yandan uygulama, işletim modunda dev modunda çalıştırılabilir. kullanıcı hape, ör.
./manage.py runserver
ayrıca.
SO soru: https://stackoverflow.com/questions/4283132/Apache-instance-user-permission-issue
Başlamak için dosyaların Apache kullanıcısına ait olduğu varsayılarak:
% chown -R Apache.apache /var/www/mysite
kullanıcı/grup pi için ACLs
ayarını yapın:
% 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
ls -l
İle bir ACL
olduğunu, izin bitlerinde '+' olduğunu söyleyebilirsiniz:
# 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
Çözüm, veritabanı dosyasını içeren dizinin işlem için yazma erişimine de sahip olduğundan emin olmaktır.
Windows 7, 8.1, 10, Server 2012 vb. İçin Bonobo kurulum yönlerini uygulayın:
IIS Kullanıcının C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data klasörünü değiştirmesine izin verin.
Böyle yaparak:
Geliştirme sunucusunun veritabanı klasöründe yazma izinleri olan aynı kullanıcıyla çalıştırılması gerekir, bu nedenle veritabanını başlangıçta root olarak oluşturduysanız, çalıştırdığınızda root olmanız gerekir:
python manage.py runserver
çalışma dizininde bir alt dizin yarat
mkdir db-folder
subdiretory'de sqlite veritabanı oluştur
sqlite3 db-folder/db.db
alt dizinin sahibini debain'de www-data veya centOS'ta Apache olarak değiştir
chown -R www-data db-folder
ve soğuk bir bira kap.
P/S: prosedürün başarılı olup olmadığını kontrol etmek için
ls -l data-folder
böyle görmelisin
-rw-r--r-- 2 www-data root 4096 Jun 18 01:38 data-folder