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


मेरे 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

अगर एक स्टैक ट्रेस आवश्यक है तो मुझे बताएं।


61
2017-08-23 12:08


मूल


ऐसा लगता है कि जब आप तैनाती कर रहे थे तो आपको यह समस्या मिली। - Mohammed Shareef C


जवाब:


आह, बस भर में ठोकर खाई एक लेख यह समझाओ। इसके अलावा Django उनके बारे में जानकारी है NewbieMistakes पृष्ठ।

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

मेरे मामले में, इस आदेश को चलाने से समस्या ठीक हुई:

sudo chown www-data .

76
2017-08-23 12:14



यह मानता है कि आप डेबियन / उबंटू पर हैं, यदि आप CentOS का उपयोग कर रहे हैं तो आप 'www-data' के बजाय 'apache' का उपयोग करना चाहते हैं - Luke Chadwick
@nbolton नोट: chown www-data. . वास्तव में होना चाहिए chown www-data . अन्यथा चोटी कमांड की कुछ जादूगर है जिसे मैं नहीं जानता ... कृपया मुझे प्रबुद्ध करें। - Jeff Sheffield
मेरा मानना ​​है कि अतिरिक्त बिंदु समूह को मालिक के डिफ़ॉल्ट समूह में सेट करना है। अन्यथा यह समूह को नहीं बदलता है। यह सिर्फ स्मृति से है, मैं अत्यधिक अनुशंसा करता हूं कि आप स्वयं को आज़माएं। - Nick Bolton
भावी लिंक रोट या टीएल के मामले में यहां संक्षेप में; डॉ। एसक्यूएलसाइट 3 डीबी फाइल की निर्देशिका में पहुंच लिखना चाहता है ताकि लेनदेन खोले जाने पर यह एक जर्नल फाइल बना सके। - user1454265
लिनक्स उपयोगकर्ताओं के लिए बढ़िया। विंडोज के लिए बपकिस। - Jay Blanchard


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

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

6
2018-01-14 22:43



यहां लिंक के प्रासंगिक हिस्सों को कॉपी / पेस्ट करें। - Christophe De Troyer
और यह एक उथल-पुथल है! :) - Christophe De Troyer


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

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

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

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

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 उपयोगकर्ता को पीआई समूह में जोड़ता है।

नोट: यदि आपके पास लॉगिंग है, तो आपको django logfile के साथ भी ऐसा करने की आवश्यकता होगी या अपाचे इसे बहुत पसंद नहीं करेगा।


5
2018-01-02 23:08



मुझे लगता है कि आप अभी भी पीआई उपयोगकर्ता को www-data समूह में जोड़ सकते थे। इसके अलावा आप फाइलों और निर्देशिकाओं पर पीआई के लिए एक्सेस कंट्रोल सूची जोड़ने के लिए बस फाइलों को छोड़ सकते हैं और setfacl कमांड का इस्तेमाल कर सकते हैं। - slm
setfacl एक संभावित अच्छे विकल्प की तरह लगता है। यह निर्देशक उत्तर के रूप में सूचीबद्ध होना अच्छा होगा। मुझे लगता है कि एक मुद्दा यह है कि मुझे अक्सर परीक्षण में .db फ़ाइल को हटाने की आवश्यकता होती है। जब इसे फिर से बनाया जाता है, तो इसे फिर से जाना चाहिए। - SpiRail
इस सवाल के लिए मेरा जवाब देखें, serverfault.com/a/462970/2518। क्या मुझे कुछ और जोड़ना चाहिए जो मदद करेगा? - slm


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

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

./manage.py runserver

भी।


5
2018-04-14 12:22





एसओ सवाल से उधार लिया: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue

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

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

सेट ACLs उपयोगकर्ता / समूह पीआई के लिए:

% 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

1
2018-01-04 13:22



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


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

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

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

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

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

1
2017-11-11 20:23





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

python manage.py runserver

0
2017-12-19 09:35



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