دستورات ریلز
دانلوداجرای دستور Rails داخل کانتینر
ric rails -- <command> دستور bin/rails <command> را داخل کانتینر پروژه اجرا میکند، با stdin، stdout و stderr وصل به ترمینال شما. بعد از پایان کار، نتیجه از کانتینر به میزبان برگردانده میشود تا فایلهای جدید (generatorها، migrationها و …) را بلافاصله در ادیتورتان ببینید.
نحوهی استفاده
$ ric rails -- generate model Post title:string body:text $ ric rails -- db:migrate $ ric rails -- db:rollback $ ric rails -- routes $ ric rails -- runner "puts User.count"
از داخل پوشهی پروژه اجرا کنید.
علامت -- در وسط، flagهای خود ric را از آرگومانهایی که به rails پاس میشوند جدا میکند. هر چیزی بعد از -- بیاید، عینا منتقل میشود.
کاری که انجام میدهد
اول، ric بررسی میکند که کانتینر <name> در حال اجراست.
دوم، دستور docker exec -w /workspace/<name> <name> bin/rails <args شما> را با stdin، stdout و stderr متصل به ترمینال شما اجرا میکند، تا generatorهایی که پیام چاپ میکنند و سوال میپرسند درست کار کنند.
سوم، بعد از پایان دستور، ric هر چیزی در پوشهی پروژهی میزبان را پاک میکند (با حفظ .git/ در صورت وجود) و کل درخت /workspace/<name> از کانتینر را دوباره کپی میکند.
ویژگی اصلی همان مرحلهی آخر است: هر چیزی که دستور Rails تولید کرده — یک مدل جدید، یک کنترلر، یک migration، یا یک بهروزرسانی در schema.rb — بدون نیاز به اجرای دستی ric sync --reverse به میزبان میرسد.
کاربردهای رایج
Generatorها. چیزی مثل ric rails -- generate scaffold Post title body:text را اجرا کنید. این داخل کانتینر migration، مدل، کنترلر، viewها و تستها را میسازد و چند لحظه بعد در ادیتور خود میبینید.
Migrationها. ric rails -- db:migrate migrationهای در انتظار را اجرا میکند. ric rails -- db:rollback آخرین migration را برمیگرداند. ric rails -- db:seed فایل seed را اجرا میکند.
Routes و بازرسی. ric rails -- routes جدول کامل routes را چاپ میکند. ric rails -- about اطلاعات نسخهی Rails و وابستگیهای آن را چاپ میکند.
اسکریپتهای سریع. ric rails -- runner "puts User.count" یک قطعهی Ruby را در محیط اپلیکیشن شما اجرا میکند، با تمام مدلهای شما بارگذاریشده.
تفاوت با ric console
ric rails -- <command> برای عملیات یکباره است و همیشه فایلسیستم کانتینر را بعد از اتمام به میزبان sync میکند. این انتخاب مناسب برای generatorها، migrationها و تسکهای اسکریپتی است.
ric console، در مقابل، یک REPL تعاملی باز میکند که فایلها را به میزبان sync نمیکند. تا زمانی که exit بزنید در کنسول میمانید. این انتخاب مناسب برای کاوش است: کار با مدلها، امتحان کردن queryها، debug کردن رکوردها.
پس: وقتی میخواهید با اپلیکیشن به صورت تعاملی صحبت کنید از ric console استفاده کنید، و وقتی میخواهید یک دستور واحد را اجرا کنید و خروجی فایل آن در ادیتور ظاهر شود از ric rails -- ... استفاده کنید.
نکات احتیاطی
پوشهی پروژهی میزبان در هر اجرا بازنویسی میشود. اگر تغییرات ذخیرهنشدهای دارید که در همان session هم داخل کانتینر نوشته بودید، برای .git/ نسخهی میزبان برنده است و برای بقیهی فایلها نسخهی کانتینر.
در دستورهایی که از طریق runner دادهای به storage/ مینویسند مراقب باشید. نوشتن موفق است، اما باید بدانید فایل اول وارد فایلسیستم کانتینر میشود و سپس در هنگام sync-back به میزبان کپی میشود.