অটলয়েডিং স্টাফের যাদু
আমি মনে করি যে ফোল্ডারগুলি থেকে অটোলোডিং স্টাফগুলি হয়ে যায় সেগুলি নিয়ন্ত্রণ করার বিকল্পটি অন্য উত্তরে যথেষ্ট পরিমাণে কভার করা হয়েছে। যাইহোক, যদি অন্য কারও জিনিসপত্র লোড করতে সমস্যা হয় তবে তাদের অটোল্যাড পাথগুলি প্রয়োজন অনুসারে সংশোধন করা হয়েছে, তারপরে এই উত্তরটি এই অটোলোড জিনিসটির পিছনে যাদু কী তা বোঝানোর চেষ্টা করে।
সুতরাং যখন সাব-ডিরেক্টরিগুলি থেকে জিনিসগুলি লোড করার বিষয়টি আসে তখন একটি গ্যাচা বা কনভেনশন থাকে আপনার সচেতন হওয়া উচিত। কখনও কখনও রুবি / রেলস ম্যাজিক (এই সময়ে বেশিরভাগ রেল) কেন কিছু হচ্ছে তা বুঝতে অসুবিধা করতে পারে। অটোলোড পাথগুলিতে ঘোষিত যে কোনও মডিউল কেবল তখনই লোড হবে যখন মডিউলটির নাম প্যারেন্ট ডিরেক্টরি নামের সাথে মিল থাকে। সুতরাং আপনি যদি lib/my_stuff/bar.rb
এমন কিছু দেওয়ার চেষ্টা করেন তবে :
module Foo
class Bar
end
end
এটি স্বয়ংক্রিয়ভাবে লোড হবে না। তারপর আবার আপনাকে পিতা বা মাতা Dir নামান্তর যদি foo
এইভাবে পথ আপনার মডিউল হোস্টিং: lib/foo/bar.rb
। এটি আপনার জন্য থাকবে। আরেকটি বিকল্প হ'ল আপনি যে ফাইলটি চান সেটি মডিউলের নাম দ্বারা নামকরণ করা। স্পষ্টতই তখন সেই নামে কেবল একটি ফাইল থাকতে পারে। আপনি যদি আপনার স্টাফটিকে অনেকগুলি ফাইলে বিভক্ত করতে চান তবে অবশ্যই অবশ্যই সেই ফাইলটি অন্য ফাইলগুলির প্রয়োজনের জন্য ব্যবহার করতে পারেন, তবে আমি সেটির প্রস্তাব দিই না, কারণ যখন তখন ডেভলপমেন্ট মোডে থাকে এবং আপনি সেই অন্যান্য ফাইলগুলিকে সংশোধন করেন তখন রেলগুলি স্বয়ংক্রিয়ভাবে অক্ষম থাকে এগুলি আপনার জন্য পুনরায় লোড করুন। আপনি যদি সত্যিই চান তবে আপনার কাছে মডিউল নামের একটি ফাইল থাকতে পারে যা মডিউলটি ব্যবহারের জন্য প্রয়োজনীয় প্রকৃত ফাইলগুলি নির্দিষ্ট করে। সুতরাং আপনার কাছে দুটি ফাইল থাকতে পারে: lib/my_stuff/bar.rb
এবং lib/my_stuff/foo.rb
পূর্ববর্তীটি উপরের মত একই এবং একক লাইনযুক্ত পরেরটি:require "bar"
এবং এটি ঠিক একই কাজ করবে।
পিএস আমি আরও একটি গুরুত্বপূর্ণ জিনিস যুক্ত করতে বাধ্য বোধ করি। ইদানীং, যখনই আমি স্বাবলম্বন করা দরকার এমন লাইব ডিরেক্টরিতে কিছু পেতে চাই, আমি ভাবতে শুরু করি যে এটি যদি এমন কিছু হয় যা আমি আসলে এই প্রকল্পের জন্য বিশেষত বিকাশ করি (যা সাধারণত এটি হয় তবে এটি কোনও দিন হতে পারে) অনেক প্রকল্পে ব্যবহৃত কোডের একটি "স্ট্যাটিক" স্নিপেট বা গিট সাবমোডিয়াল ইত্যাদিতে পরিণত করুন .. যা ক্ষেত্রে অবশ্যই এটি লিবিব ফোল্ডারে থাকা উচিত) তবে সম্ভবত এটির জায়গাটি কোনও দিনই লিব ফোল্ডারে নেই। সম্ভবত এটি অ্যাপ ফোল্ডারের অধীনে সাবফোল্ডারে থাকা উচিত · আমার মনে হয় যে এটি কাজ করার নতুন রেলপথ। স্পষ্টতই, একই যাদুটি আপনার কাজগুলিতে যেখানেই অটোল্যাডের পথে কাজ করে থাকে আপনি নিজের জিনিসগুলি রাখেন তাই এই জিনিসগুলির পক্ষে এটি ভাল। যাইহোক, এটি কেবল বিষয়টিতে আমার চিন্তাভাবনা। আপনি দ্বিমত মুক্ত। :)
আপডেট: যাদু ধরনের সম্পর্কে ..
সেভেরিন তার মন্তব্যে যেমন উল্লেখ করেছেন, মূল "অটোল্যাড মডিউল মেকানিজম" নিশ্চিত যে এটি রুবির অংশ, তবে অটোলোড পথগুলি স্টাফ নয়। আপনার আরেলগুলি করার দরকার নেইautoload :Foo, File.join(Rails.root, "lib", "my_stuff", "bar")
। এবং যখন আপনি প্রথমবার মডিউল ফুটিকে রেফারেন্স দেওয়ার চেষ্টা করবেন তখন এটি আপনার জন্য বোঝা হবে। তবে রেলগুলি যা করে তা হ'ল এটি আমাদের নিবন্ধিত ফোল্ডারগুলি থেকে স্বয়ংক্রিয়ভাবে স্টাফ লোড করার একটি উপায় দেয় এবং এটি এমনভাবে প্রয়োগ করা হয়েছে যাতে নামকরণের কনভেনশন সম্পর্কে কিছু ধারণা করা দরকার। যদি এটি এর মতো কার্যকর না করা হয়ে থাকে, তবে প্রতিবার আপনি যখন লোড করা হয়নি এমন কোনও কিছু উল্লেখ করেন তখন অটোল্যাড ফোল্ডারের সমস্ত ফাইলের মধ্যে দিয়ে যাচাই করতে হবে এবং এর মধ্যে যে কোনওটিতে আপনি উল্লেখ করার চেষ্টা করছেন কি না তা পরীক্ষা করে দেখতে হবে। এর ফলে অটোলোডিং এবং অটোরিলোডিংয়ের ধারণাটি পরাস্ত হবে। যাইহোক, এই কনভেনশনগুলির স্থানে এটি মডিউল / শ্রেণি থেকে আপনার লোড করার প্রয়াসটি কেটে নিতে পারে যেখানে এটি সংজ্ঞায়িত হতে পারে এবং কেবল এটি লোড করুন।
app/lib
।