it-swarm-tr.com

Neden sqlite hatası alıyorum, "veritabanı dosyası açılamıyor"?

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.

65
Nick Bolton

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 .
80
Nick Bolton

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).

7
SpiRail

Django, SQLite3 bölüm Yeni başlayanlar hataları Django wiki sayfa :

  1. apache'nin veritabanının üst dizinine de yazabildiğinden emin olun
  2. veritabanı dosyasının tam yolundaki klasörlerin hiçbirinin bir sayıyla başlamadığından emin olun
  3. db dizininin tam yolunun mevcut olduğundan emin olun
  4. /tmp dizininizin dünya çapında yazılabilir olduğundan emin olun
  5. settings.py içinde belirtilen veritabanının yolunun tam yol olduğundan emin olun
  6. yolda özel karakter olmadığından emin olun
  7. windows'ta, db dizin yolunun çift boşlukla yazıldığından emin olun
7
ssc

Www-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.

5
Hartmut P.

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
1
slm

Çö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:

  1. app_Data klasörünün özelliklerini seçin,
  2. güvenlik sekmesine gidin,
  3. düzenle'yi tıklayın,
  4. IIS kullanıcı (benim durumumda IIS_IUSRS) seçin ve Değiştirme ve Yazma izni ekleyin,
  5. uygula düğmesiyle bu ayarları onaylayın.
1
DEXTER360

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
0
Kilizo

ç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
0
brotich