मुझे "त्रुटि डेटाबेस फ़ाइल खोलने में असमर्थ", क्यों मुझे sqlite त्रुटि मिलती है?


65

मेरे Django ऐप का उपयोग करके, मैं डेटाबेस से ठीक पढ़ने में सक्षम हूं। जब एप्लिकेशन को फ़ाइल तक पहुंचने की अनुमति नहीं थी, तो उसने मुझे यह त्रुटि दी:

एक पठनीय डेटाबेस लिखने का प्रयास

जो समझ में आया। इसलिए मैंने फ़ाइल पर अनुमतियों को संपादित किया, ताकि अपाचे प्रक्रिया ने अनुमतियाँ लिखीं। हालाँकि, यह लिखने में सक्षम होने के बजाय, मुझे यह गुप्त त्रुटि मिली:

डेटाबेस फ़ाइल खोलने में असमर्थ

यदि यह उपयोगी है, तो यहां संपूर्ण आउटपुट है:

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

मुझे पता है कि क्या एक स्टैक ट्रेस आवश्यक है।


आपको लगता है कि आपको यह समस्या तब हुई जब आप तैनाती कर रहे थे।
मोहम्मद शरीफ C

जवाबों:


79

अहा, यह समझाते हुए एक लेख को पार कर गया । इसके अलावा Django उनके NewbieMistakes पेज पर जानकारी है ।

समाधान यह सुनिश्चित करने के लिए है कि डेटाबेस फ़ाइल वाली निर्देशिका को भी लिखने की अनुमति है प्रक्रिया के लिए अनुमति दी गई है।

मेरे मामले में, इस कमांड को चलाने से समस्या ठीक हो गई:

sudo chown www-data .

3
यह मानता है कि आप डेबियन / ubuntu पर हैं, यदि आप सेंटोस का उपयोग कर रहे हैं तो आप 'www-data' के बजाय 'अपाचे' का उपयोग करना चाहते हैं
ल्यूक चाडविक

3
@nbolton नोट: chown www-data. .वास्तव में होना चाहिए chown www-data .अन्यथा चॉइस कमांड की कुछ जादूगर है जिसके बारे में मुझे जानकारी नहीं है ... कृपया मुझे बताएं।
जेफ शेफील्ड

3
मेरा मानना ​​है कि अतिरिक्त बिंदु समूह को स्वामी के डिफ़ॉल्ट समूह में सेट करना है। अन्यथा यह समूह को नहीं बदलता है। यह सिर्फ स्मृति से है, हालांकि, मैं अत्यधिक अनुशंसा करता हूं कि आप स्वयं को आज़माएं।
निक बोल्टन

भविष्य की कड़ी सड़ांध या टीएल के मामले में यहां संक्षेप में कहा गया है: SQLite3 डीबी फ़ाइल की निर्देशिका तक पहुंच लिखना चाहता है ताकि लेनदेन के खुलने पर यह एक जर्नल फ़ाइल बना सके।
user1454265

लिनक्स उपयोगकर्ताओं के लिए बढ़िया है। विंडोज के लिए bupkiss।
जे। ब्लान्कार्ड

7

मेरा समाधान इस तरह से अधिक था। मैं वास्तव में इस dir के स्वामित्व को बदलना नहीं चाहता था। (ज्यादातर क्योंकि मैं gi जैसी चीजों को करने के लिए pi उपयोगकर्ता का उपयोग करता हूं)

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

(या जो भी db आप उपयोग कर रहे हैं)

जहां pi वह उपयोगकर्ता है जिसे मैंने सभी फ़ाइलों को बनाया है (हाँ यह एक रास्पबेरी पाई है)

Www-data को अनुमतियाँ बदलने के बजाय, मैंने पाया कि मुझे केवल इस तरह अनुमतियाँ बदलने की आवश्यकता है:

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

यह समूह को आवश्यक फाइलों तक पहुंच प्रदान करता है और www-data उपयोगकर्ता को pi समूह में जोड़ता है।

नोट: यदि आपके पास लॉगिंग है, तो आपको इसे django logfile के लिए भी करना होगा या अपाचे इसे अधिक पसंद नहीं करेंगे।


1
मुझे लगता है कि आप www उपयोगकर्ता डेटा समूह में भी पाई उपयोगकर्ता जोड़ सकते हैं। इसके अलावा, आप फ़ाइलों को छोड़ सकते हैं जैसे वे हैं और फ़ाइलों और निर्देशिकाओं पर पाई के लिए एक्सेस कंट्रोल सूची जोड़ने के लिए कमांड सेटफैक्ल का उपयोग किया जाता है।
SLM

setfacl एक संभावित अच्छे विकल्प की तरह लगता है। यह एक अनुदेशात्मक उत्तर के रूप में सूचीबद्ध होना अच्छा होगा। एक समस्या यह है कि मुझे अक्सर परीक्षण में .db फ़ाइल को हटाने की आवश्यकता होती है। जब इसे फिर से बनाया जाता है, तो इसे फिर से नामांकित करने की आवश्यकता होती है।
9

, इस प्रश्न के लिए मेरा उत्तर देखें serverfault.com/a/462970/2518 । क्या कुछ और है जो मुझे इसमें जोड़ना चाहिए जो मदद करेगा?
स्लम

7

से Django का कहना है जब SQLite3 का उपयोग कर "डेटाबेस फ़ाइल खोलने में असमर्थ" अनुभाग की नौसिखिया गलतियों Django विकी पेज :

  1. सुनिश्चित करें कि अपाचे डेटाबेस की मूल निर्देशिका को भी लिख सकता है
  2. सुनिश्चित करें कि डेटाबेस फ़ाइल का पूर्ण पथ का कोई भी फ़ोल्डर संख्या से शुरू नहीं होता है
  3. सुनिश्चित करें कि dbनिर्देशिका पूर्ण पथ मौजूद है
  4. सुनिश्चित करें कि आपकी /tmpनिर्देशिका विश्व-लेखन योग्य है
  5. सुनिश्चित करें कि डेटाबेस में निर्दिष्ट settings.pyपथ एक पूर्ण पथ है
  6. सुनिश्चित करें कि मार्ग में कोई विशेष वर्ण नहीं हैं
  7. विंडोज पर, सुनिश्चित करें कि db डायरेक्टरी पाथ डबल बैकलैश के साथ लिखा गया है

लिंक के संबंधित हिस्सों को यहां कॉपी / पेस्ट करें।
क्रिस्टोफ़ डे ट्रॉयर

और यह एक उत्थान है! :)
क्रिस्टोफ़ डे ट्रॉयर

5

Www-data समूह में एक परिचालन उपयोगकर्ता जोड़ना मेरे परीक्षण वातावरण पर अच्छा काम कर रहा है। इसके अतिरिक्त मैंने sqlite3.db फ़ाइल को एक अलग सबफ़ोल्डर में रखा है , और अधिक सुरक्षित होने के लिए।

डेटाबेस फ़ाइल www-data के स्वामित्व में होगी

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

मेरे परिचालन उपयोगकर्ता हाप को www-data समूह का सदस्य मिलता है:

sudo usermod -a -G www-data hape

डेटाबेस फ़ाइल को समूह www-डेटा के सदस्यों तक पहुँच की अनुमति दें:

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

परिणामस्वरूप, डेटाबेस को अपाचे2-डेमन (उपयोगकर्ता www-डेटा) द्वारा पढ़ा जा सकता है, परियोजना रूट फ़ोल्डर को अनुदान दिए बिना पहुँचा जा सकता है, और दूसरी ओर - ऐप को परिचालन द्वारा देव मोड में चलाया जा सकता है। उपयोगकर्ता हाप, उदा

./manage.py runserver

भी।


1

SO प्रश्न से उधार: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue

मान लिया जाए कि फ़ाइलें प्रारंभ करने के लिए अपाचे उपयोगकर्ता के स्वामित्व में हैं:

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

ACLsउपयोगकर्ता / समूह 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

आप वहाँ एक बता सकते हैं ACLके साथ ls -l, अनुगामी '+' अनुमतियाँ बिट्स पर:

# 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

संपूर्ण django प्रोजेक्ट के लिए स्वामी / समूह को अपाचे प्रक्रिया में सेट करना एक बुरा विचार है, अनावश्यक विशेषाधिकार देने की आवश्यकता नहीं है।
१०

1

समाधान यह सुनिश्चित करने के लिए है कि डेटाबेस फ़ाइल वाली निर्देशिका को भी लिखने की अनुमति है प्रक्रिया के लिए अनुमति दी गई है।

के लिए विंडोज 7, 8.1, 10, सर्वर 2012, आदि का पालन बोनोबो स्थापना दिशाओं :

IIS उपयोगकर्ता को C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data फ़ोल्डर को संशोधित करने की अनुमति दें।

ऐसा करने के लिए:

  1. App_Data फ़ोल्डर के गुण चुनें,
  2. सुरक्षा टैब पर जाएं,
  3. संपादित करें पर क्लिक करें
  4. IIS उपयोगकर्ता का चयन करें (मेरे मामले में IIS_IUSRS) और संशोधित करें और अनुमति लिखें,
  5. लागू करें बटन के साथ इन सेटिंग्स की पुष्टि करें।

0

विकास सर्वर को उसी उपयोगकर्ता के रूप में चलाने की आवश्यकता है जो डेटाबेस फ़ोल्डर पर लिखने की अनुमति देता है, इसलिए यदि आपने मूल रूप से डेटाबेस को रूट के रूप में बनाया है, तो आपको चलाने पर रूट करने की आवश्यकता होगी:

python manage.py runserver

जबकि तकनीकी रूप से सही है, सर्वर को चलाने के रूप rootमें एक भयानक विचार है - यह chownडेटाबेस से बेहतर होगा कि नियमित रूप से अनपेक्षित उपयोगकर्ता के लिए जो सामान्य रूप से सर्वर चलाता है ...
voretaq7

0

कार्य निर्देशिका में एक उपनिर्देशिका बनाएँ

mkdir db-folder 

उपखंड में sqlite डेटाबेस बनाएँ

sqlite3 db-folder/db.db

सब-वे के लिए स्‍वामित्‍व में www या डेटा सेंट और अपाचे में उपनिर्देशिका के लिए स्वामी बदलें

chown -R www-data db-folder

और आपके द्वारा की गई ठंडी बीयर कोज़ को पकड़ो।

पी / एस: यह जांचने के लिए कि क्या प्रक्रिया संक्षिप्त थी

ls -l data-folder

आपको ऐसा देखना चाहिए

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

यदि आप कोई उत्तर पोस्ट करने जा रहे हैं, तो कृपया वह उत्तर प्रदान करें जो एक ही प्रश्न पर अन्य उत्तरों से काफी भिन्न है।
मसेगलोह

-1

बस लिखो sudo sqlite3 databaseFilename.sqlऔर यह काम है


यह एक इंटरैक्टिव उपयोगकर्ता सत्र के लिए काम कर सकता है, लेकिन वेब एप्लिकेशन के लिए समाधान नहीं है ...
HBruijn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.