Heroku에서 호스팅되는 Ruby on Rails 프로젝트에 적합한 추가 구성 요소

12822 단어 railsherokucloudruby
Heroku와 Ruby on Rails 프로젝트에서 8년여 동안 일한 후에 제가 가장 좋아하는 Heroku 플러그인이 생겼습니다. 이 플러그인들은 Rails 응용 프로그램과 매우 잘 어울립니다.일상적인 Ruby 개발자에게 유용한 추가 구성 요소를 알아보실 수 있습니다.

Heroku 추가 구성 요소


이것은 내가 Heroku Marketplace에서 가장 좋아하는 Heroku 플러그인 목록과 내가 Heroku에서 위탁 관리하는 Ruby on Rails 프로젝트에서 그것들을 선택한 이유이다.

Heroku 스케줄러


Heroku Scheduler 예약된 작업을 10분, 시간 또는 매일 실행할 수 있습니다.나는 그것으로 내가 예약한 라크 임무를 운행한다.예를 들어, 나는 매일 라크 작업을 실행하여 지난 24시간 동안 가입한 사용자의 요약을 메일로 보낸다.
Heroku 스케줄러 플러그인은 무료입니다.유일한 제한은 Unix 시스템의 cron보다 옵션이 적다는 것입니다.일주일에 한 번씩 라크 작업을 실행해야 한다면, 필요할 때 건너뛰기 위해 Heroku Scheduler에서 라크 작업을 일일 작업으로 설정하고, 라크 작업 자체에서 하루를 검사해야 합니다.
# lib/tasks/schedule/notify_users_about_past_due_subscription.rake
namespace :schedule do
  desc 'Send notification about past due subscriptions to users'
  task notify_users_about_past_due_subscription: :environment do
    if Time.current.monday?
      Billing::NotifyUsersAboutPastDueSubscriptionWorker.perform_async
    else
      Rails.logger.info("Skip schedule:notify_users_about_past_due_subscription task.")
    end
  end
end

New Relic APM


New Relic 어플리케이션 성능 모니터링을 위한 추가 모듈이것은 내가 가장 좋아하는 부가 구성 요소 중의 하나다.이것은puma/unicorn/sidekiq perdyno와 같은 모든 과정을 추적할 수 있도록 합니다.가장 많은 시간을 소비하는 Rails 디렉터를 볼 수 있습니다.처리량이 가장 많은 API 끝점과 시간이 많이 걸리는 끝점을 볼 수 있습니다.New Relic은 여러 차례 프로그램의 병목 현상을 디버깅하는 데 도움을 주었습니다. 그래서 저는 평균 50밀리초의 응답 시간으로 완성할 수 있었습니다. Knapsack Pro APIRails 애플리케이션이 느려야 한다고 말하는 사람:)

바리케이드


Rollbar 루비 코드와 프런트엔드 JS 코드에서 예외 추적을 허용합니다.그것은 매달 5000개의 예외 제한이 있는 아낌없는 무료 계획을 가지고 있다.
일부 common Rails 예외는 무시하고 무료로 예약할 수 있습니다.
# config/initializers/rollbar.rb
Rollbar.configure do |config|
  config.access_token = ENV['ROLLBAR_ACCESS_TOKEN']

  if Rails.env.test? || Rails.env.development?
    config.enabled = false
  end

  # Add exception class names to the exception_level_filters hash to
  # change the level that exception is reported at. Note that if an exception
  # has already been reported and logged the level will need to be changed
  # via the rollbar interface.
  # Valid levels: 'critical', 'error', 'warning', 'info', 'debug', 'ignore'
  # 'ignore' will cause the exception to not be reported at all.
  config.exception_level_filters.merge!('ActionController::RoutingError' => 'ignore')
  config.exception_level_filters.merge!('ActionController::InvalidAuthenticityToken' => 'ignore')
  config.exception_level_filters.merge!('ActionController::BadRequest' => 'ignore')
  config.exception_level_filters.merge!('ActiveRecord::RecordNotFound' => 'ignore')
  config.exception_level_filters.merge!('Rack::Timeout::RequestTimeoutException' => 'ignore')
  config.exception_level_filters.merge!('Rack::QueryParser::InvalidParameterError' => 'ignore')
  config.exception_level_filters.merge!('ActionDispatch::Http::MimeNegotiation::InvalidType' => 'ignore')

  config.environment = ENV['ROLLBAR_ENV'].presence || Rails.env
end

로깅


Logentries - 나중에 찾아보기 위해 Heroku 표준 출력에서 로그를 수집합니다.로그에서 며칠 전에 발생한 문제에 대한 정보를 찾으려면 로그 항목이 도움이 될 수 있습니다.
물론 터미널에서 Heroku Command Line Interface 명령을 사용하고 heroku logs -n 10000 --app my-heroku-app 명령을 실행해서 마지막 10000줄의 로그를 볼 수 있지만, 이런 방법은 한계가 있습니다.로그 항목에서처럼 과거 로그에서 너무 많은 필터를 할 수 없습니다.
Logentries는 무료로 5GB, 7일간 보존됩니다.이 정도면 소형 Rails 애플리케이션에 충분합니다.
나는 Logentries의 좋은 기능 중 하나를 좋아한다. 검색어를 저장하고 그것을 통해 로그를 빠르게 훑어보는 것이다.로그를 기반으로 그래프를 표시할 수도 있습니다.혹시 Sidekiq의 어떤 직원이 호출되는 빈도를 보고 싶으세요?너는 그것을 상상할 수 있다.

Redis 클라우드


Ruby on Rails 애플리케이션에서 Redis를 사용한다면 Redis Cloud 는 추가 구성 요소입니다.그것은 다른 부가 부품보다 더 실속 있는 무료 계획을 가지고 있다.
Redis Cloud 플러그인은 자동으로 데이터를 백업하고 실시간 Redis 사용 상황과 데이터베이스 실례의 역사적 사용 상황을 미리 볼 수 있는 좋은 웹 UI를 제공합니다.

Rails 애플리케이션에서 Redis Cloud + sidekiq gem 을 사용하는 것을 좋아합니다.또한 메모리에 데이터를 빠르게 캐시하고 일정 시간 후에 만료시켜야 한다면 Redis도 유용하다.
redis_connection = Redis.new(
  # use REDISCLOUD_URL when app is running on Heroku,
  # or fallback to local Redis (useful for development)
  url: ENV.fetch('REDISCLOUD_URL', 'redis://localhost:6379/0'),
  # tune network timeouts to be a little more lenient when you are seeing occasional timeout
  # errors for Heroku Redis Cloud addon
  # https://github.com/mperham/sidekiq/wiki/Using-Redis#life-in-the-cloud
  timeout: 5
)

redis_connection.setex('my-key-name', 1.hour, 'this value will expire in 1 hour')

Twilio SendGrid


SendGrid는 Ruby on Rails로부터 이메일을 보낼 수 있는 무료 추가 구성 요소입니다.사용자가 메일을 받을 수 있도록 도메인을 연결할 수도 있다.
무료 프로그램에는 매달 12000통의 무료 이메일이 있다.

Heroku 플러그인으로 시간과 비용을 절약할 수 있습니다.


다음은 제가 가장 좋아하는 몇 개의 플러그인입니다. 이 플러그인들은 프로젝트에서 자금과 시간을 절약하는 데 도움을 줄 것입니다.

자동 태속


AutoIdle 무대에 오르고 리뷰 앱을 자동으로 히로쿠 위에 올려놓고 자면 돈을 절약할 수 있다.응용 프로그램에 데이터가 없을 때, 나는 그것으로 나의 네트워크와 Staging 응용 프로그램의worker dyno를 닫는다.저녁과 주말에는 Heroku 자원에 대해 더 이상 비용을 지불하지 않습니다

Rails 자동 배율 조정


Rails Autoscale는 Heroku에서 돈을 절약할 수 있는 기능이 강한 추가 구성 요소입니다.이것은 요청 대기열 시간을 측정하고 이를 바탕으로 웹 프로세스에 동태를 추가하거나 삭제합니다.만약 당신이 낮에 더 많은 유량을 가지고 있다면, 그것은 더욱 많은 동태를 증가시킬 것이다.교통량이 비교적 낮은 밤에, 그것은dynos를 제거할 것이다.

또한 Rails Autoscale은 작업 대기열을 추적할 수도 있습니다.예를 들어 Sidekiq에 많은 작업을 배정했다면, Rails Autoscale는 더 많은 작업 동태를 추가해서 작업 대기열을 더 빨리 처리할 것입니다.처리할 일이 없을 때, 워크맨 디노를 닫을 수도 있어, 더 많은 돈을 절약할 수 있다.

배낭 전문가


Knapsack Pro는 Rspec, Cucumber, Minitest 등에서 Rails 테스트를 실행하고 모든 CI 서버의 병렬 컴퓨터 사이에서 테스트를 자동으로 분할하는 Heroku 플러그인과 루비gem이다.Heroku CI, Circleci, Buildkite, Travis CI 등과 협력합니다. 모든 병렬 작업이 비슷한 시간에 이루어지도록 함으로써 시간을 절약할 수 있습니다.이렇게 하면 CI 구축의 운행을 최적화하고 최대 시간을 절약할 수 있다.
다음은 테스트의 가장 좋은 분포 예이다. 그 중에서 각 병렬 CI기는 10분의 테스트를 실행하고 한 개의 CI 서버에서만 테스트를 실행하면 전체 CI 구축은 40분이 아니라 10분만 지속된다.

저는 계속 개발하고 있습니다Knapsack Pro add-on. 한번 시도해 보시면 피드백을 듣고 싶습니다.

좋은 웹페이지 즐겨찾기