প্রকল্প সম্পর্কে

Cratefield Harness হলো Cratefield-এর পেছনের ওপেন-সোর্স MIT-লাইসেন্সপ্রাপ্ত কোর, যা একটি Rust ব্যাকএন্ড হারনেস যার মাধ্যমে আপনি আপনার নিজস্ব ব্যাকএন্ড কম্পাইল করতে পারেন। এর মূল ধারণা হলো: প্রতিটি পণ্যের একটি ব্যাকএন্ড প্রয়োজন এবং খুব কম ক্ষেত্রেই তা একদম শুরু থেকে তৈরি করা উচিত, তাই এটিই সেই একবার তৈরি করা ব্যাকএন্ড। আপনি মডিউল ক্রেটগুলি বেছে নেন, অ্যাডাপ্টারগুলি সংযুক্ত করেন এবং নিজস্ব ডাটাবেসসহ একটি স্টেটলেস Worker শিপ করেন। কম্পোজিশন মডেল। একটি ভেঞ্চার একটি Harness বিল্ডার ঘোষণা করে যার একটি ভেঞ্চার আইডেন্টিটি, পাবলিক URL এবং CORS অরিজিন থাকে; এতে মডিউল যোগ করা হয় এবং ডাটাবেস বাইন্ডিং, মেইলার এবং ক্যাপচা প্রোভাইডারের সাথে একটি রানটাইম নির্বাচন করা হয়। বিল্ড প্রক্রিয়া এমন মডিউল প্রত্যাখ্যান করে যা রানটাইমের প্রদান না করা কোনো পোর্ট দাবি করে, অথবা দুটি মডিউল একই টেবিল বা রুট দাবি করে, অথবা ভিন্ন কন্ট্রাক্ট ভার্সনের বিপরীতে তৈরি মডিউল। ভেঞ্চার টেমপ্লেটটি cargo test-এর অধীনে কম্পোজিশনটি চালায়, যাতে ডেপ্লয়মেন্টের আগেই ভুল কনফিগারেশন ধরা পড়ে। মডিউল এবং পোর্ট। একটি মডিউল হলো Module trait ইমপ্লিমেন্ট করা একটি ক্রেট এবং এটি মডিউল নাম অনুযায়ী একটি ভার্সনযুক্ত পাথে মাউন্ট করা হয়। এটি তার নাম, প্রয়োজনীয় পোর্ট, মাইগ্রেশন (include_str!-এর মাধ্যমে এমবেডেড SQL, যা SQLite এবং Postgres উভয়ের দ্বারা গৃহীত একটি সাবসেট) এবং একটি axum রাউটার ঘোষণা করে। মডিউলগুলি কখনোই ভেন্ডর বাইন্ডিং, এনভায়রনমেন্ট ভেরিয়েবল বা ভেন্ডর ক্লায়েন্ট স্পর্শ করে না; তারা Database, Mailer, Captcha, RateLimiter, Signer এবং KeyValue-এর মতো পোর্টের অনুরোধ করে এবং অ্যাডাপ্টারগুলি তার উত্তর দেয়। README অনুযায়ী, এই একটি নিয়মই Cloudflare থেকে সরে যাওয়াকে মাত্র একটি রানটাইম ক্রেটের পরিবর্তনের বিষয়ে পরিণত করে। অন্তর্ভুক্ত ক্রেটসমূহ। cratefield ফাসাদ; Module trait, Harness বিল্ডার, পোর্ট trait, problem+json এরর, রিকোয়েস্ট স্কোপ, ইভেন্ট বাস এবং টেমপ্লেটসহ cratefield-core; cratefield-runtime-cloudflare; Resend মেইল, Turnstile ক্যাপচা এবং rusqlite-এর মাধ্যমে SQLite-এর জন্য অ্যাডাপ্টার; ডাবল অপ্ট-ইন, আনসাবস্ক্রাইব এবং অ্যাডমিন এক্সপোর্টসহ email-signup এবং কনফার্ম, পজিশন এবং রেফারেল কোডসহ waitlist মডিউল; Database পোর্টের মাধ্যমে এনভেলপ-এনক্রিপ্টেড সিক্রেটসসহ cratefield-secrets; ডাটা কি র‍্যাপ এবং আনর‍্যাপ করার জন্য cratefield-kms, যার একটি লোকাল-ফাইল প্রোভাইডার রয়েছে যা প্রোডাকশনে কাজ করে না; cratefield-ui, যা /ui পাথে মডিউল সারফেসকে HTML হিসেবে রেন্ডার করে; fz বাইনারি সহ cratefield-cli যা মাইগ্রেশন কালেক্ট, ডক্টর এবং মডিউল কমান্ড প্রদান করে; এবং cratefield-testing, একটি কনফরমেন্স কিট যা প্রতিটি মডিউলকে পাস করতে হয়। পরিকল্পিত ক্রেটগুলোর মধ্যে রয়েছে sqlx-এর মাধ্যমে cratefield-adapter-postgres এবং tokio-র উপর cratefield-runtime-native। মাইগ্রেশন এবং রিকোয়েস্ট। কুয়েরিগুলো sea-query-এর মাধ্যমে যায় যাতে তারা যেকোনো ডাটাবেসের জন্য রেন্ডার হতে পারে। কনফার্মেশন এবং আনসাবস্ক্রাইব লিঙ্কগুলি কি রোটেশনসহ HMAC-সাইনড টোকেন, তাই কোনো সেশন স্টোরের প্রয়োজন হয় না। রিকোয়েস্ট স্কোপ শেয়ারড স্টেটের পরিবর্তে axum এক্সটেনশনে ভ্রমণ করে এবং কনফরমেন্স কিটে একটি কনকারেন্ট-রিকোয়েস্ট টেস্ট অন্তর্ভুক্ত থাকে যা এটি যাচাই করে। মাউন্টিং। একটি মডিউল হয় Worker-এর মধ্যে কম্পাইল করা হয় (যা ডিফল্ট), অথবা একটি সাইডকার হিসেবে চালানো হয় যার নিজস্ব Worker আলাদাভাবে বিল্ড এবং ডেপ্লয় করা হয় এবং একই ডাটাবেস ও সিক্রেটস সহ একটি সার্ভিস বাইন্ডিংয়ের মাধ্যমে একই পাথে মাউন্ট করা হয়। README-তে উল্লেখ আছে যে সাইডকার অপশনটি ডিজাইন করা হয়েছে কিন্তু এখনও তৈরি করা হয়নি। অবজারভেবিলিটি। প্রতিটি রিকোয়েস্টের জন্য একটি স্ট্রাকচার্ড স্প্যান request_id, method, route, module, status, duration_ms, ip_hash এবং ua_family বহন করে, তবে কখনোই ইমেল অ্যাড্রেস বহন করে না। টেমপ্লেট wrangler.toml-এ Workers Logs সক্রিয় করা থাকে এবং রেসপন্সগুলো x-request-id প্রতিধ্বনি করে। এরর ট্যাক্সনমি কোর রেজিস্ট্রি থেকে জেনারেট করা হয় এবং CI-তে ড্রিফট-চেক করা হয়। রিপোজিটরিতে বর্ণিত রোডম্যাপ। M0 ফাউন্ডেশন (ওয়ার্কস্পেস টুলিং, কোর, Cloudflare রানটাইম, Resend এবং Turnstile অ্যাডাপ্টার, SQLite অ্যাডাপ্টার, fz, টেস্টিং কিট), M1 প্রথম মডিউলসমূহ, M2 crates.io পাবলিশিং, ডক্স এবং কন্ট্রাক্ট ভার্সনিং সহ প্রথম লাইভ ভেঞ্চার (বর্তমানে ইন-প্রগ্রেস), এবং M3 Postgres অ্যাডাপ্টার, নেটিভ রানটাইম, প্যারিটি স্যুট এবং ডাটা মুভসহ সেলফ-হোস্টেড পোর্টেবিলিটি। আরও তিনটি এপিক নির্দিষ্ট করা হয়েছে তবে সেগুলোর সময়সূচী নির্ধারিত নয়। টুলচেইন এবং স্ট্যাটাস। rust-toolchain.toml-এ স্টেবল Rust পিন করা আছে, টার্গেট wasm32-unknown-unknown, worker-build এবং wrangler; CI-তে fmt, ক্লিপ্পি (ওয়ার্নিং নিষিদ্ধ), টেস্ট, cargo deny চালানো হয় এবং উদাহরণ ভেঞ্চারটিকে wasm-এ বিল্ড করা হয় যাতে কোনো নেটিভ-অনলি ডিপেন্ডেন্সি মডিউলে ঢুকে পড়তে না পারে। ক্রেটগুলো এখনও crates.io-তে পাবলিশ করা হয়নি, তাই README-তে গিট-এর মাধ্যমে রিপোজিটরির ওপর নির্ভর করার পরামর্শ দেওয়া হয়েছে। প্রাইভেট ক্রেটগুলো আলাদা রিপোজিটরিতে না রেখে publish = false হিসেবে চিহ্নিত করা হয়েছে। লাইসেন্স: MIT।