فاکتور دوازدهم: Admin Processes
فاکتور دوازدهم در 12-Factor App مربوط به اجرای وظایف مدیریتی و اداری به عنوان فرآیندهای یکباره (One-off Processes) است. علاوه بر فرآیندهای اصلی اپلیکیشن که کارهای روزمره را انجام میدهند، گاهی توسعهدهندگان نیاز دارند تا کارهای مدیریتی یا نگهداری یکباره را اجرا کنند.

نمونههای One-off Processes
- اجرای Database Migrations مانند
manage.py migrateدر Django یاrake db:migrateدر Rails. - اجرای کنسول (REPL shell) برای اجرای کد دلخواه یا بررسی مدلها در مقابل پایگاه داده زنده، مانند
python،irbیاrails console. - اجرای اسکریپتهای یکباره موجود در کدبیس، مانند
php scripts/fix_bad_records.php.
ویژگیهای مهم Admin Processes
- باید در همان محیطی اجرا شوند که فرآیندهای اصلی اپلیکیشن اجرا میشوند (همان release، همان کدبیس و همان config).
- کد مدیریتی باید همراه با کد اپلیکیشن منتشر شود تا مشکلات هماهنگی از بین برود.
- همان روشهای isolation وابستگیها باید در همه فرآیندها اعمال شود. برای مثال:
- Ruby: اگر وب پروسه با
bundle exec thin startاجرا میشود، migration باید باbundle exec rake db:migrateاجرا شود. - Python: اگر وب سرور Tornado با Virtualenv اجرا میشود، هر فرآیند مدیریتی باید از
bin/pythonهمان محیط استفاده کند.
- Ruby: اگر وب پروسه با
- استفاده از زبانهایی که REPL shell ارائه میدهند توصیه میشود، زیرا اجرای اسکریپتهای یکباره آسانتر است.
- در محیط محلی، توسعهدهنده با اجرای دستور مستقیم در پوشه checkout اپلیکیشن، این فرآیندها را اجرا میکند؛ در محیط production میتوان از ssh یا سایر مکانیزمهای اجرای دستورات از راه دور استفاده کرد.
نمونه عملی
فرض کنید اپلیکیشن شما نیاز به migration دارد. در محیط development کافی است دستور rake db:migrate اجرا شود تا تغییرات پایگاه داده اعمال شوند. این همان کد و config را استفاده میکند که پروسههای web در production نیز از آن استفاده میکنند، بنابراین هماهنگی کامل بین محیطها حفظ میشود.