আমি কীভাবে কোনও এসকিউএলাইট ডাটাবেসকে পঠনযোগ্য থেকে পঠন-পাঠাতে পরিবর্তন করতে পারি?
আমি আপডেট বিবৃতি কার্যকর করার সময়, আমি সর্বদা পেয়েছিলাম:
এসকিউএল ত্রুটি: একটি পঠনযোগ্য ডেটাবেস লেখার চেষ্টা
এসকিউএল ফাইলটি ফাইল সিস্টেমে একটি লিখনযোগ্য ফাইল।
আমি কীভাবে কোনও এসকিউএলাইট ডাটাবেসকে পঠনযোগ্য থেকে পঠন-পাঠাতে পরিবর্তন করতে পারি?
আমি আপডেট বিবৃতি কার্যকর করার সময়, আমি সর্বদা পেয়েছিলাম:
এসকিউএল ত্রুটি: একটি পঠনযোগ্য ডেটাবেস লেখার চেষ্টা
এসকিউএল ফাইলটি ফাইল সিস্টেমে একটি লিখনযোগ্য ফাইল।
উত্তর:
এই ত্রুটি বার্তার জন্য বিভিন্ন কারণ থাকতে পারে:
বেশ কয়েকটি প্রক্রিয়ার একই সাথে ডাটাবেস খোলা থাকে ( এফএকিউ দেখুন )।
সংযুক্ত করতে এবং ডাটাবেসটি এনক্রিপ্ট করার জন্য একটি প্লাগইন রয়েছে। এটি ডিবি সংশোধন করার অনুমতি দেয় না।
শেষ অবধি, অন্য একটি FAQ বলছে: "নিশ্চিত করুন যে ডাটাবেস ফাইল যুক্ত ডিরেক্টরিটি সিজিআই স্ক্রিপ্টটি সম্পাদনকারী ব্যবহারকারীর কাছেও লেখার যোগ্য।" আমি মনে করি কারণ এটি ইঞ্জিনকে ডিরেক্টরিতে আরও ফাইল তৈরি করা দরকার।
পুরো ফাইল সিস্টেমটি কেবল পঠিত হতে পারে, উদাহরণস্বরূপ ক্রাশের পরে।
ইউনিক্স সিস্টেমে অন্য একটি প্রক্রিয়া পুরো ফাইলটি প্রতিস্থাপন করতে পারে।
/ ডিবি ডির সমস্ত ফাইলে আমার কাছে রুট থেকে আমার কাছে পরিবর্তন করে এটি সমাধান করেছি।
কেবলমাত্র ls -l
সেই ফোল্ডারেই করুন, যদি কোনও ফাইলার মালিকানাধীন থাকে root
তবে তা আপনার কাছে পরিবর্তন করুন:sudo chown user file
এই ত্রুটিটি সাধারণত ঘটে যখন আপনার ডাটাবেসটি ইতিমধ্যে একটি অ্যাপ্লিকেশন দ্বারা অ্যাক্সেস করা হয় এবং আপনি অন্য অ্যাপ্লিকেশন দিয়ে এটি অ্যাক্সেস করার চেষ্টা করছেন।
(এই ত্রুটি বার্তাটি সাধারণত বিভ্রান্তিমূলক হয় এবং এটি সাধারণত একটি সাধারণ অনুমতি ত্রুটি)
উইন্ডোজ এ
অ্যান্ড্রয়েড ব্যবহার করা হলে।
নিশ্চিত করুন যে আপনি আপনার লেখার অনুমতি যোগ করেছেন EXTERNAL_STORAGE
আপনার টু AndroidManifest.xml
।
AndroidManifest.xml
আপনার <application>
ট্যাগের উপরে এবং বাইরে এই ফাইলটিতে এই লাইনটি যুক্ত করুন ।
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
এটি আপনার অ্যাপ্লিকেশনটিকে এসডিকার্ডে লেখার অনুমতি দেবে। EXTERNAL_STORAGE
আপনি ডিভাইসটিতে আপনার ডাটাবেসটি যেখানে সংরক্ষণ করেছেন এটি সেখানে থাকলে এটি সহায়তা করবে ।
লিনাক্স কমান্ড শেল-এ, আমি করেছি:
chmod 777 <db_folder>
যেখানে ডাটাবেস ফাইল রয়েছে।
এটা কাজ করে। এখন আমি আমার ডাটাবেস অ্যাক্সেস করতে এবং সন্ধান সন্নিবেশ করতে পারি।
আমারও আজ এই সমস্যা ছিল।
এটি উইন্ডোজ মোবাইলের অ্যাক্টিভ সিঙ্কের কারণে হয়েছিল - আমি যে ফোল্ডারে কাজ করছিলাম তা সিঙ্ক হয়েছিল যাতে এএস প্রক্রিয়া সময়ে সময়ে এই ত্রুটির কারণ হয়ে ডিবি ফাইলটি ধরেছিল।
ব্যক্তিগত অভিজ্ঞতা ভাগ করে নেওয়ার জন্য আমি এই ত্রুটির সাথে মুখোমুখি হয়েছি যা শেষ পর্যন্ত উভয়কেই ঠিক করে দেয়। অগত্যা আপনার সমস্যার সাথে সম্পর্কিত হতে পারে তবে এই ত্রুটিটি এতই জেনেরিক যে এটি গাজিলিয়ন জিনিসের জন্য দায়ী করা যেতে পারে appears
ডেটাবেস উদাহরণ অন্য অ্যাপ্লিকেশন খোলা। আমার ডিবি "লকড" অবস্থায় রয়েছে বলে মনে হয়েছিল তাই এটি কেবল পঠন মোডে রূপান্তরিত হয়। আমি ডিবি ভাগ করে নেওয়ার জন্য অ্যাপ্লিকেশনটির ২ য় উদাহরণ বন্ধ করে এটি ট্র্যাক করতে সক্ষম হয়েছি।
ডিরেক্টরি গাছের অনুমতি - দয়া করে নিশ্চিত হয়ে নিন যে ব্যবহারকারীর অ্যাকাউন্টের কেবল ফাইল পর্যায়ে নয়, পুরো আপার ডিরেক্টরি স্তরে / স্তরে সমস্তভাবে অনুমতি রয়েছে।
ধন্যবাদ
লিনাক্সে, ডাটাবেস ফাইলযুক্ত পুরো ফোল্ডারে পড়ার / লেখার অনুমতি দিন।
এছাড়াও, সেলইনাক্স লিখনটি ব্লক করছে। আপনাকে সঠিক অনুমতিগুলি সেট করতে হবে।
আমার সেলিনাক্স ম্যানেজমেন্ট জিইউআইতে (ফেডোরা ১৯-তে), আমি httpd_unified (সমস্ত সামগ্রী ফাইলের HTTPD হ্যান্ডলিংকে একীভূত করা) লেবেলযুক্ত বক্সটিতে চেক করেছিলাম এবং আমি যেতে পেরেছিলাম।
উইন্ডোজে:
tl; dr: ফাইলটি আবার খোলার চেষ্টা করুন।
আমাদের সিস্টেমটি এই সমস্যায় ভুগছিল, এবং এটি অবশ্যই কোনও অনুমতির সমস্যা ছিল না, কারণ প্রোগ্রামটি নিজেই বেশিরভাগ সময় থ্রেড থেকে রাইটিং হিসাবে ডেটাবেস খুলতে সক্ষম হত, তবে মাঝে মাঝে (কেবল উইন্ডোজে, ওএসএক্সে নয়), প্রোগ্রামের অন্যান্য থ্রেডগুলির কোনও অসুবিধা না থাকলেও একটি থ্রেড এই ত্রুটিগুলি পেতে পারে।
আমরা শেষ পর্যন্ত আবিষ্কার করেছি যে থ্রেডগুলি ব্যর্থ হচ্ছিল কেবল সেগুলি যা অন্য থ্রেডটি বন্ধ করে দেওয়ার সাথে সাথেই 3 টি ডাটাবেস খোলার চেষ্টা করেছিল (3 এমএসের মধ্যে)। আমরা অনুমান করেছিলাম যে সমস্যাটি উইন্ডোজ (বা উইন্ডোজের অধীনে স্ক্লাইট প্রয়োগ) ফাইলটি বন্ধ হওয়ার সাথে সাথে ফাইল সংস্থানগুলি তত্ক্ষণাত পরিষ্কার করে না। আমরা খোলার পরে ডিবির বিরুদ্ধে একটি পরীক্ষা লেখার ক্যোয়ারী চালিয়ে এটি পেয়েছি (উদাহরণস্বরূপ, একটি নির্বোধ নাম দিয়ে একটি টেবিল বাদ দিয়ে তৈরি করা)। যদি তৈরি / ড্রপ ব্যর্থ হয়, আমরা ৫০ এমএস অপেক্ষা করে আবার চেষ্টা করেছি, আমরা সফল না হওয়া পর্যন্ত বা 5 সেকেন্ড না পেরিয়ে পুনরাবৃত্তি করেছি।
এটা কাজ করেছে; স্পষ্টতই কেবলমাত্র সংস্থানগুলিকে ডিস্কে প্রবাহিত করার জন্য পর্যাপ্ত সময় দরকার ছিল।
উবুন্টুতে, মালিককে অ্যাপাচি গ্রুপে পরিবর্তন করুন এবং সঠিক অনুমতি দিন (না, এটি 777 নয়):
sudo chgrp www-data <path to db.sqlite3>
sudo chmod 664 <path to db.sqlite3>
হালনাগাদ
আপনি গ্রুপ এবং ব্যবহারকারীর জন্যও অনুমতি নির্ধারণ করতে পারেন ।
sudo chown www-data:www-data <path to db.sqlite3>
কমান্ড লাইন থেকে, যেখানে আপনার ডাটাবেস ফাইলটি রয়েছে সেই ফোল্ডারটি প্রবেশ করুন এবং নিম্নলিখিত কমান্ডটি কার্যকর করুন:
chmod 777 databasefilename
এটি সমস্ত ব্যবহারকারীর জন্য সমস্ত অনুমতি প্রদান করবে।
ডিবি সম্পাদনা করুন: আমি ডিবি সম্পাদনা করতে সমস্যা হচ্ছিলাম। আমি শেষ না করে
'নন রুট ইউজারনেম' ts3server.sqlitedb
যতক্ষণ না এটি রুট ছিল না, ফাইলটি সম্পাদনা করতে পারতাম। ব্যবহারকারীর নাম হল আমার অ মূল অ্যাকাউন্টের ব্যবহারকারীর নাম।
টিমস্পেককে অটো স্টার্ট করুন: আপনার নন রুট অ্যাকাউন্ট হিসাবে
ক্রন্টব
-e
@reboot / ts3server / ওরফে / home/ts3server/ts3server_startscript.sh এর পথে
প্রকল্পের পথে টার্মিনাল জাঙ্গো_প্রজেক্ট #
sudo chown django:django *