در این مقاله ، من محبوب ترین مدیر نسخه های Ruby on a Mac را مقایسه می کنم: Chruby ، Rbenv و RVM ، و همچنین Asdf ، یک مدیر نسخه برای چندین زبان ، و Frum ، یک مدیر نسخه جدید گروه که در Rust نوشته شده است. من توصیه هایی را براساس آنچه بیشتر از همه به آن نیاز دارید ، ارائه خواهم داد
Ruby از پیش نصب شده برای برنامه نویسان نیست
افرادی که تازه کار Ruby هستند ، با کشف اینکه Ruby از قبل روی macOS نصب شده ، بسیار خوشحال می شوند. آنها وقتی یک توسعه دهنده با تجربه تر به آنها می گوید ، “از سیستم Mac Ruby استفاده نکنید” اغلب ناامید می شوند. من نوشته ام جای دیگر در مورد دلایل به طور خلاصه ، سیستم Ruby برای macOS وجود دارد ، نه برای شما. برای اجرای اسکریپت های نرم افزاری خوب است ، اما برای توسعه ، سیستم Ruby قدیمی است و اگر دقت نکنید ، نصب سنگهای قیمتی می تواند منجر به سردرد شود (از جمله نقض امنیت سیستم).
یک مشکل یاقوتی Homebrew
Homebrew مدیر بسته است که تقریباً به استانداردی برای افزودن نرم افزار توسعه دهنده به macOS تبدیل شده است. Homebrew نصب نسخه جدید Ruby را برای جلوگیری از اتکا به سیستم Ruby آسان می کند. اما Homebrew دو مشکل دارد. ابتدا ، هنگام نصب سایر بسته های Homebrew ، نسخه Ruby Homebrew می تواند به طور خودکار و غیرمنتظره با نسخه جدید جایگزین شود (مشکلی که توسط brew pin ruby
) از همه مهمتر ، Homebrew فقط به شما امکان نصب یک نسخه از Ruby را می دهد. اگر در حال ساخت یا نگهداری بیش از یک پروژه در Ruby هستید ، به احتمال زیاد باید از نسخه های Ruby استفاده کنید. آنجاست که شما به یک مدیر نسخه نیاز دارید.
Asdf برای چند زبان
اسدف یک مدیر نسخه است که چندین زبان را در خود جای داده است. اگر از Ruby برای توسعه برنامه های وب با Rails 6 استفاده می کنید ، باید Node و Yarn را نصب کنید تا یک برنامه شروع کننده Rails ایجاد کنید. (Rails 7 ممکن است نیاز به Node را برطرف کند ، اما در حال حاضر این هنوز قطعی نیست.)
بنابراین ، برای یک توسعه دهنده Rails ، Asdf یک مدیر نسخه ایده آل است. همچنین اگر برنامه های کاربردی را در پایتون ، اکسیر یا بسیاری از زبانهای دیگر توسعه دهید ، به خوبی به شما کمک می کند (نگاه کنید به a لیست زبانهای پشتیبانی شده) آیا استفاده از Asdf نقطه ضعفی دارد؟ فقط دوتا. استفاده می کند شیم برای رهگیری دستورات معمول ، که می تواند عیب یابی را دشوار کند. همچنین ، برای برخی از عملیات می تواند کمی کند باشد. اگر به چندین زبان در حال توسعه هستید ، توصیه می کنم Asdf را امتحان کنید تا ببینید آیا آن را دوست دارید یا خیر. اگر متوجه شدید که Asdf سرعت شما را کم می کند ، به Frum بروید ، مدیر نسخه فقط Ruby که در Rust نوشته شده است.
فقط مدیران نسخه Ruby
اگر فقط قصد استفاده از برنامه های Ruby را دارید ، از بین چهار مدیر نسخه فقط Ruby: Chruby ، Frum ، Rbenv و RVM را انتخاب کنید. تفاوت این چهار مورد در سرعت ، پیچیدگی و نحوه تعویض نسخه های روبی است. بیایید ابتدا به قدیمی ترین نگاه کنیم: RVM.
RVM
RVM اولین مدیر محبوب نسخه برای روبی بود. هنوز هم نگهداری می شود و به طور گسترده مورد استفاده قرار می گیرد. RVM سیستم را اصلاح می کند cd
دستور برای تنظیم متغیرهای محیط هنگام تغییر فهرست ها. برای غلبه بر cd
دستور ، اسکریپت نصب RVM پرونده پیکربندی پوسته را تغییر می دهد ( ~/.zshrc
پرونده در Mac های جدیدتر).
RVM متغیرهای محیط را به درستی نمایش می دهد تا نسخه و مکان Ruby و Gem را نشان دهد ، که می تواند به تشخیص مشکلات کمک کند. با این حال ، RVM شامل ویژگی های اضافی مانند سنگهای قیمتی است. از آنجا که بوندلر برای مدیریت وابستگی به سنگهای قیمتی به هسته اصلی یاقوت اضافه شده ، دیگر به سنگهای قیمتی نیازی نیست. پیچیدگی اضافی نیازی نیست ، بنابراین بسیاری از توسعه دهندگان به یک نسخه نسخه جدیدتر مانند Rbenv ، Chruby یا Frum روی آورده اند.
ربنف
همراه با RVM ، ربنف مدت طولانی محبوب ترین مدیر نسخه برای Ruby بوده است. Rbenv استفاده می کند شیم برای رهگیری دستورات معمول Ruby. (اسدف از شیمن نیز استفاده می کند.)
پس از نصب Rbenv با Homebrew ، باید خود را اصلاح کنید ~/.zshrc
بایگانی کنید بنابراین سایه های Rbenv بر دستورات معمولی Ruby اولویت دارند. شیم تماس می گیرد rbenv exec
دستور ، که تعیین می کند قبل از اجرای هرگونه دستور Ruby ، از کدام نسخه از Ruby استفاده شود.
شیم ها دو اشکال دارند. اول ، shims با پنهان کردن دستور واقعی ، عیب یابی را دشوارتر می کند. به عنوان مثال which ruby
دستور shben Rbenv را نشان می دهد ، نه نسخه واقعی Ruby (شما باید تنظیم کنید RBENV_DEBUG
اگر می خواهید دستور Ruby واقعی را ببینید). دوم ، یک shim می تواند ثانیه های میکرو ثانیه تأخیر را به اجرای دستور Ruby اضافه کند. (Rbenv برخلاف RVM هر بار که شما یک دستور Ruby را اجرا می کنید ، مداخله می کند ، که فقط در هنگام تغییر دایرکتوری ها دخالت می کند.) برای توسعه دهندگانی که متوجه تأخیر می شوند ، یا ایده shims را دوست ندارند ، Chruby یا Frum وجود دارد.
چرکین
چرکین به اندازه RVM یا Rbenv شناخته شده نیست ، اما توسط چندین توسعه دهنده برجسته Ruby حمایت می شود. بر خلاف RVM ، بیش از حد نیست cd
فرمان دادن برخلاف Rbenv یا Asdf ، دستورات را با استفاده از shims رهگیری نمی کند. شما باید خود را اصلاح کنید ~/.zshrc
پرونده را ارسال کنید تا Chruby در محیط پوسته محلی شما اجرا شود. نیازی به اصلاح کردن نیست $PATH
، همانطور که Chruby این کار را برای شما انجام می دهد ، بر اساس نسخه Ruby که انتخاب کرده اید.
Chruby همچنین متغیرهای محیطی خاصی را برای Ruby تعیین می کند. این تنها چیزی است که Chruby برای تغییر در بین نسخه های Ruby لازم است. این برای عیب یابی با خوب است which
. من چندین سال از Chruby استفاده کردم و مشکلی با آن نداشتم. Chruby یک انتخاب عالی است ، اما ممکن است بخواهید Frum ، جدیدترین مدیر نسخه Ruby را امتحان کنید.
فروم
فروم به زبان Rust نوشته شده است ، زبان خوبی برای اجرای سریع خط فرمان نرم افزار سیستم است. Frum جدید است (در اوایل سال 2021 منتشر شد). برخلاف Asdf ، Chruby یا Rbenv ، این شامل یک دستور نصب کننده Ruby داخلی است بنابراین برنامه اضافی برای نصب Ruby مورد نیاز نیست. نصب سریع است و Frum به هیچ وابستگی احتیاج ندارد (این یک قابلیت اجرایی همه در یک زنگ است که می توانید با Homebrew نصب کنید).
بعد از نصب Frum ، باید خود را اصلاح کنید ~/.zshrc
پرونده را ارسال کنید تا Frum در محیط پوسته محلی شما اجرا شود. مانند سایر مدیران نسخه ، a را بررسی می کند .ruby-version
پرونده را در فهرست پروژه قرار دهید و اگر نسخه خاصی برای پروژه مشخص نباشد ، به طور پیش فرض در یک نسخه جهانی Ruby قرار می گیرد. هیچ برشی وجود ندارد (بر خلاف Asdf یا Rbenv) و این بیش از حد نیست cd
دستور (بر خلاف RVM). گرچه جدید است اما من آن را توصیه می کنم زیرا همه در یک و سریع است.
نصب مدیر نسخه برای Ruby
من کامل نوشتم راهنمای نصب Ruby در Mac. در راهنما ، من دستورالعمل هایی را برای:
اگر می خواهید RVM یا Rbenv را کاوش کنید ، به این موارد مراجعه کنید:
یادداشتی درباره داکر
اگر از مدیران نسخه Ruby نام ببرید ، کسی احتمالاً می گوید ، “من از Docker استفاده می کنم.” داکر یک ابزار کانتینر سازی است که برخی از توسعه دهندگان از آن برای مدیریت نسخه استفاده می کنند. مورد اصلی استفاده از Docker ایجاد یک سرور مجازی قابل تکرار است که شامل نسخه پیکربندی شده از هرگونه وابستگی نرم افزاری باشد که برای اجرای یک برنامه (زبان ، پایگاه داده ، صف های پیام) مورد نیاز است. به همین ترتیب ، برای ایجاد نسخه “منجمد” از محیط توسعه برای استقرار در سرور ایده آل است.
شما همچنین می توانید به صورت محلی درون یک ظرف توسعه پیدا کنید ، اما سرعت آن کندتر خواهد شد ، به حافظه بیشتری احتیاج دارد و در مقایسه با مدیر نسخه پیچیدگی پیکربندی را اضافه می کند. برای ساده نگه داشتن مسائل ، من از Docker برای توسعه محلی اجتناب می کنم مگر اینکه یک برنامه کاملاً ناراحت کننده باشد.
نتیجه
اگر روی چندین پروژه در Ruby کار می کنید ، فقط یک کاربر معمولی Ruby نیستید. مطمئن شوید که یک مدیر نسخه عالی در محیط توسعه محلی خود نصب کرده اید.
من Asdf را دوست دارم زیرا در Ruby و JavaScript توسعه می یابم و Asdf برای هر دو زبان یک مدیر نسخه به من می دهد. با این حال ، Asdf از شیم (مانند Rbenv) استفاده می کند ، بنابراین گاهی اوقات سرعت آن از من بیشتر است. همچنین برای من آزار دهنده است که Asdf دستور واقعی را از عیب یابی با which
فرمان دادن اگر این اشکالات بیش از سهولت مدیریت چندین زبان است ، توصیه می کنم از Frum برای جابجایی در نسخه های Ruby خود استفاده کنید. مدیران نسخه باید ساده باشند و هنگام کار از راه شما دور باشند.