আমি কেন স্ক্লাইট ত্রুটি করব, "ডাটাবেস ফাইল খুলতে অক্ষম"?


65

আমার জ্যাঙ্গো অ্যাপ্লিকেশন ব্যবহার করে, আমি ঠিকঠাক ডাটাবেস থেকে পড়তে সক্ষম। যখন অ্যাপ্লিকেশনটির কাছে ফাইলটি অ্যাক্সেস করার অনুমতি ছিল না, তখন এটি আমাকে এই ত্রুটি দেয়:

পঠনযোগ্য ডাটাবেস লেখার চেষ্টা করুন

যা বোধগম্য হয়েছিল। সুতরাং আমি ফাইলটিতে অনুমতিগুলি সম্পাদনা করেছি, যাতে অ্যাপাচি প্রক্রিয়াটিতে লেখার অনুমতি ছিল। তবে এটি লিখতে সক্ষম হওয়ার পরিবর্তে, আমি এই ক্রিপ্টিক ত্রুটি পেয়েছি:

ডাটাবেস ফাইল খুলতে অক্ষম

যদি এটি দরকারী হয় তবে পুরো আউটপুটটি এখানে:

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

যদি একটি স্ট্যাক ট্রেস প্রয়োজন হয় তা আমাকে জানান।


মনে হচ্ছে আপনি মোতায়েন করার সময় আপনি এই সমস্যাটি পেয়েছিলেন।
মোহাম্মদ শরীফ সি

উত্তর:


79

আহা, স্রেফ এটি ব্যাখ্যা করে একটি নিবন্ধ জুড়ে হোঁচট খেয়েছে । এছাড়াও জ্যাঙ্গো তাদের নিউবিস্টিস্ট পৃষ্ঠাগুলিতে তথ্য রয়েছে ।

সমাধানটি ডাটাবেস ফাইলযুক্ত ডিরেক্টরিতে প্রক্রিয়াটিতে রাইটিং অ্যাক্সেস রয়েছে কিনা তা নিশ্চিত করা।

আমার ক্ষেত্রে, এই আদেশটি চালানো সমস্যার সমাধান করেছে:

sudo chown www-data .

3
এটি ধরে নিয়েছে আপনি ডেবিয়ান / উবুন্টুতে রয়েছেন, আপনি যদি সেন্টোস ব্যবহার করছেন তবে আপনি 'www-ডেটা' এর পরিবর্তে 'অ্যাপাচি' ব্যবহার করতে চাইছেন
লূক চ্যাডউইক

3
@ ননবোল্টন দ্রষ্টব্য: chown www-data. .আসলে chown www-data .অন্যথায় কিছু হওয়া উচিত যা জঘন্য আদেশের কিছু জাদু আছে যা সম্পর্কে আমি জানিনা ... দয়া করে আমাকে আলোকিত করুন।
জেফ শেফিল্ড

3
আমি বিশ্বাস করি যে অতিরিক্ত বিন্দুটি মালিকের ডিফল্ট গোষ্ঠীতে সেট করা। অন্যথায় এটি গ্রুপ পরিবর্তন করে না। এটি ঠিক স্মৃতি থেকে হলেও, আমি আপনাকে সুপারিশ করছি এটি চেষ্টা করে দেখুন।
নিক বোল্টন

ভবিষ্যতের লিঙ্ক পচা বা tl; ডঃ এর ক্ষেত্রে সংক্ষিপ্ত আকারে: এসকিউএলাইট 3 ডিবি ফাইলের ডিরেক্টরিতে লেখার অ্যাক্সেস চায় যাতে কোনও লেনদেন খোলা হলে সেখানে একটি জার্নাল ফাইল তৈরি করতে পারে।
ব্যবহারকারী1454265

লিনাক্স ব্যবহারকারীদের জন্য দুর্দান্ত। উইন্ডোজ জন্য Bupkiss।
জে ব্লানচার্ড

7

আমার এটির সমাধানটি এরকমই ছিল। আমি সত্যিই এই দির মালিকানা পরিবর্তন করতে চাইনি। (বেশিরভাগ কারণেই আমি পাই ব্যবহারকারীকে গিটের মতো কাজ করতে ব্যবহার করি)

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

(বা আপনি যে কোনও ডিবি ব্যবহার করছেন)

যেখানে পাই এমন ব্যবহারকারী যা আমি সমস্ত ফাইল তৈরি করেছি yes (হ্যাঁ এটি রাস্পবেরি পাই)

Www-ডেটাতে অনুমতি পরিবর্তন করার পরিবর্তে, আমি দেখতে পেয়েছি যে কেবলমাত্র আমার কাছে অনুমতিগুলি পরিবর্তন করা দরকার:

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

এটি গ্রুপকে প্রয়োজনীয় ফাইলগুলিতে লেখার অ্যাক্সেস দেয় এবং পাই-গ্রুপে www-ডেটা ব্যবহারকারীকে যুক্ত করে।

দ্রষ্টব্য: আপনার যদি লগিং থাকে তবে জাঙ্গো লগফাইলে আপনার এটি করতে হবে বা অ্যাপাচি এটি খুব পছন্দ করবে না।


1
আমি মনে করি আপনি কেবল পাই-ব্যবহারকারীকে www-ডেটা গ্রুপেও যুক্ত করতে পারতেন। এছাড়াও আপনি ফাইলগুলি ঠিক সেভাবেই রেখে দিতে পারতেন এবং ফাইল এবং ডিরেক্টরিতে পাইয়ের জন্য অ্যাক্সেস কন্ট্রোল তালিকা যুক্ত করতে setfacl কমান্ডটি ব্যবহার করতে পারেন।
slm

সেটফ্যাকল একটি সম্ভাব্য ভাল বিকল্পের মতো শোনাচ্ছে। এটির নির্দেশিক উত্তর হিসাবে তালিকাভুক্ত করা ভাল হবে। আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল আমাকে পরীক্ষা করার সময় .db ফাইলটি মুছতে হবে। যখন এটি পুনরায় তৈরি করা হয়, এটি আবার ছাঁটাই করা দরকার।
স্পাইরাইল

এই প্রশ্নের জন্য আমার উত্তরটি দেখুন, সার্ভারসফল্ট / এ / 462970/2518 । আমার আরও কিছু যুক্ত করা উচিত যা সাহায্য করবে?
slm

7

থেকে জ্যাঙ্গো বলছেন যখন SQLite3 ব্যবহার "ডাটাবেস ফাইলটি খোলা যাচ্ছে না" অধ্যায় এর নবাগত ভুল জ্যাঙ্গো উইকি পৃষ্ঠা :

  1. নিশ্চিত করুন যে আপাচি ডাটাবেসের পিতামহিত ডিরেক্টরিতেও লিখতে পারে
  2. ডাটাবেস ফাইলের পুরো পাথের কোনও ফোল্ডারই কোনও সংখ্যার সাথে শুরু না করে তা নিশ্চিত করুন
  3. dbডিরেক্টরিটি বিদ্যমান রয়েছে তা নিশ্চিত করুন
  4. আপনার /tmpডিরেক্টরিটি বিশ্ব-লিখনযোগ্য কিনা তা নিশ্চিত করুন
  5. সুনির্দিষ্ট করে নিন যে সুনির্দিষ্ট ডাটাবেসটির settings.pyপথটি একটি সম্পূর্ণ পথ is
  6. পথে কোনও বিশেষ অক্ষর নেই তা নিশ্চিত করুন
  7. উইন্ডোজে, নিশ্চিত করুন যে ডিবি ডিরেক্টরি পাথটি ডাবল ব্যাকলেশ দিয়ে লেখা হয়েছে

লিঙ্কের সম্পর্কিত অংশগুলি এখানে অনুলিপি করুন / আটকান।
ক্রিস্টোফ ডি ট্রয়ের

এবং এটি একটি upvote! :)
ক্রিস্টোফ ডি ট্রায়ার

5

Www- ডেটা গ্রুপে একটি অপারেশনাল ব্যবহারকারী যুক্ত করা আমার পরীক্ষার পরিবেশের উপর ভাল কাজ করছে। অধিক সুরক্ষিত হওয়ার জন্য, আমি পৃথক সাবফোল্ডারে sqlite3.db ফাইলটি রেখেছি ।

ডাটাবেস ফাইলটি www-ডেটা দ্বারা মালিকানাধীন থাকবে

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

আমার অপারেশনাল ইউজার হাইপ www-ডেটা গ্রুপের সদস্য পায়:

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

ফলস্বরূপ, প্রকল্পের রুট ফোল্ডারে কোনও অনুদান না দিয়ে, অ্যাপাচি ২-ডেমন (ব্যবহারকারী www-ডেটা) দ্বারা ডাটাবেসটি পঠন + অ্যাক্সেস করা যায় এবং - অন্যদিকে - অ্যাপ্লিকেশনটি ডিভাইস মোডে চালানো যেতে পারে ব্যবহারকারী হ্যাপ, যেমন

./manage.py runserver

এছাড়াও।


1

এসও প্রশ্ন থেকে নেওয়া হয়েছে: 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

সমাধানটি ডাটাবেস ফাইলযুক্ত ডিরেক্টরিতে প্রক্রিয়াটিতে রাইটিং অ্যাক্সেস রয়েছে কিনা তা নিশ্চিত করা।

জন্য উইন্ডোজ 7, 8.1, 10, সার্ভার 2012, ইত্যাদি অনুসরণ Bonobo ইনস্টলেশন দিকনির্দেশ :

আইআইএস ব্যবহারকারীকে সি: \ ইনপটব \ wwwroot \ Bonobo.Git.Server \ App_Data ফোল্ডারটি সংশোধন করার অনুমতি দিন।

তাই না:

  1. App_Data ফোল্ডারের বৈশিষ্ট্য নির্বাচন করুন,
  2. সুরক্ষা ট্যাবে যান,
  3. সম্পাদনা ক্লিক করুন,
  4. আইআইএস ব্যবহারকারী নির্বাচন করুন (আমার ক্ষেত্রে আইআইএস_আইইউএসআরএস) এবং পরিবর্তন এবং লেখার অনুমতি যুক্ত করুন,
  5. প্রয়োগ বোতামের সাহায্যে এই সেটিংসটি নিশ্চিত করুন।

0

ডেভেলপমেন্ট সার্ভারটি একই ব্যবহারকারীর মতো চালানো দরকার যিনি ডাটাবেস ফোল্ডারে পার্ম লেখেন, সুতরাং আপনি যদি মূলত ডাটাবেসটিকে রুট হিসাবে তৈরি করেন তবে চালানোর সময় আপনাকে রুট হতে হবে:

python manage.py runserver

প্রযুক্তিগতভাবে সঠিক হওয়ার সাথে সাথে সার্ভারটি চালানো rootএকটি ভয়ানক ধারণা chownthe নিয়মিত
অপ্রতীকৃত

0

ওয়ার্কিং ডিরেক্টরিতে একটি উপ-ডিরেক্টরি তৈরি করুন

mkdir db-folder 

মহকুমায় স্ক্লাইট ডাটাবেস তৈরি করুন

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

আপনি যদি কোনও উত্তর পোস্ট করতে চলেছেন, দয়া করে একই প্রশ্নের অন্যান্য উত্তরগুলির চেয়ে আলাদা যে উত্তরটি সরবরাহ করুন।
masegaloeh

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.