جم هایی که برای برنامه های Rails SaaS استفاده می کنم

این مقاله در ابتدا در Build a SaaS with Rails منتشر شد
بهعنوان یک توسعهدهنده Ruby on Rails، کتابخانههای بزرگ و بالغی برای افزودن قابلیتهای خاص به برنامه خود خراب شدهاید. با ساختن (موفق) برنامه های SaaS برای بیش از یک دهه، من مجموعه کوچکی از سنگ های قیمتی را ساخته ام که همیشه به برنامه های Rails (SaaS) خود اضافه می کنم و در مواقعی که ویژگی های خاصی مورد نیاز است به تعدادی از آنها دسترسی پیدا می کنم.
چه زمانی از یک جواهر استفاده کنیم یا چه زمانی بسازیم؟
این بسیار شخصی است، اما قاعدهای که من استفاده میکنم این است که باید عملکردی را اضافه کند که روی لبهها کار میکند و منطق تجاری خالص را اضافه نمیکند. مثال: اگر یکی از ویژگیهای اصلی برنامه من پیامرسانی مستقیم باشد، از Gem برای آن استفاده نمیکنم، اما از Gem برای بخش ارسال (از طریق وب سوکتها) استفاده میکنم. چیزهای دیگری که به بازی می آیند: lindy-effect و اگر نگهبانان در Ruby/Rails سرمایه گذاری کنند.
جواهرات زیر در هر برنامه SaaS که من ساخته ام قرار می گیرند. من سنگ های قیمتی را که به طور پیش فرض اضافه می شوند، مانند ریل (🦉)، بوت اسنپ، راه راه و غیره حذف کردم. گاهی اوقات برنامههای کوچکتری (پروژه جانبی) میسازم که هدف متفاوتی دارند—سپس ممکن است گزینههای دیگری را انتخاب کنم.
سنگهای قیمتی برای هر برنامه
به ترتیب حروف الفبا:
اقدام_سیاست
پس از مدتی استفاده از Pundit. من action_policy را یک گزینه همه کاره تر برای نیازهای مجوز خود پیدا کرده ام. به خصوص می توانم منبع دیگری را انتخاب کنمcurrent_user
برای پایه چکهایم – که برای برنامههای SaaS (عضو تیم، فضای کاری و غیره) رایج است
anyway_config
از همان نویسنده ای با عنوان action_policy. این به من اجازه می دهد تا شیء پیکربندی را تنظیم کنم. سپس از مقدار پیش فرض، اعتبار Rails یا متغیرهای محیطی استفاده می کند.
نمونه ای از برنامه من:
# frozen_string_literal: true
class StripeConfig < ApplicationConfig
attr_config :api_key, :signing_secret,
:default_price_id, api_version: "2024-12-18.acacia", max_network_retries: 2
end
را api_key
و signing_secret
از اعتبارنامه Rails خوانده می شود، اما اگر من نیاز به تغییر یکی از آنها داشته باشم، به دلیل نشتی، بدون استقرار، می توانم تنظیم کنم STRIPE_API_KEY=sk_1234
.
فقط داشتن تمام تنظیمات برای خدمات یا سایر انتزاعات واقعاً کار را آسان می کند.
خوب_کار
قبل از good_job از Sidekiq استفاده کردم. و عالی است. اما وابستگی به Redis چیزی است که من دوست ندارم. اگر SaaS کوچکی (با یک تیم یک نفره) اجرا می کنید، هر وابستگی که می توانید حذف کنید یک برد است. Good Job برای آن عالی است. من دوست دارم از PostreSQL استفاده کند و شما می توانید صف مشاغل خود را “در خط” کنید. این ویژگی اخیر به من این امکان را داد که فقط با یک داینو سرگرمی Heroku یک SaaS را به ~1k در MRR برسانم. من فکر می کنم که شگفت انگیز است.
لاگراژ
چیز زیادی برای گفتن در مورد این یکی نیست، فقط این است که سیاهههای مربوط را در تولید کنترل می کند. Gem را اضافه می کنم و یک مقدار اولیه مانند این ایجاد می کنم:
Rails.application.configure do
config.lograge.enabled = if !Rails.env.development? || ENV["LOGRAGE_IN_DEVELOPMENT"] == "true"
true
else
false
end
config.lograge.custom_options = lambda do |event|
options = event.payload.slice(:request_id, :user_id)
options
end
end
ریل_طراح
این یکی ممکن است شما را شگفت زده نکند زیرا کتابخانه اجزای رابط کاربری Rails Designer از SaaS قبلی استخراج شده است. من از مؤلفههای موجود استفاده میکنم، چه بهصورتی که هست، چه در دستهبندیهای فرعی یا کمی بهینهسازی شده برای مطابقت با رابط کاربری برنامه.
Rails_Icons
هر برنامه (SaaS) به نمادها نیاز دارد. آنها به راهنمایی کاربر کمک می کنند یا به او کمک می کنند تا سریعتر حرکت کند. Rails Icons جواهری است که توسط Rails Designer حمایت می شود و به شما امکان می دهد به راحتی آیکون ها را از بسیاری از کتابخانه های نماد اضافه کنید. همچنین پشتیبانی برای افزودن کتابخانههای آیکونهایی که پشتیبانی شخص اول ندارند در حین استفاده از همان API وجود دارد.
stealth_dom_id
این ممکن است یک فایل در شما باشد lib پوشه، اما داشتن آن به عنوان یک جواهر به گسترش بهتر این ایده کمک می کند. اگر استفاده می کنید dom_id
زیاد، شاید بخواهید از این گوهر استفاده کنید. این به پنهان کردن شناسه اصلی رکورد کمک می کند، که ممکن است اطلاعات تجاری باشد که نمی خواهید به اشتراک بگذارید.
مهاجرت های قوی
دروغ نمی گویم: انتقال پایگاه داده در تولید با مشتریان پولی چیزی نیست که برای من شادی ایجاد کند. این جواهر مقدار کمی از استرس را از بین می برد، بنابراین من آن را به هر برنامه اضافه می کنم.
جواهرات برای ویژگی های خاص
برخی از ویژگی هایی که به آنها نیازی ندارم هر برنامه، اما وقتی این کار را انجام می دهم، این جواهرات همان هایی هستند که می خواهم.
http.rb
اگر من نیاز به درخواست با روبی داشته باشم، به سراغ این گوهر می روم. من API را دوست دارم، بیشتر از API خود Ruby شبیه روبی است.
آلبا
آلبا جواهری است که من در هنگام نیاز به سریال سازی JSON خود از آن استفاده می کنم. شروع کار آسان است، اما ویژگی های کافی برای همه کاره بودن را دارد.
موقعیت یابی
از همان نویسنده ای که این جواهر، مدل رتبه بندی شده، جواهر قبلی من برای رکوردهای موقعیت یابی بود. من فرض ساده آن را دوست دارم، در حالی که هنوز با تمام نیازهای سفارش من مطابقت دارد.