8000 GitHub - vickyonit/production_rails: Best practices for running Rails in production
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

vickyonit/production_rails

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 

Repository files navigation

Production Rails

Best practices for running Rails in production

Errors

Use an error reporting service like Rollbar.

Timeouts

Use Slowpoke for request and database timeouts. 💎 disclaimer: one of my gems

Throttling

Use Rack Attack to throttle and block requests.

Audits

Use an auditing library like Audited.

Logging

Use Lograge.

gem 'lograge'

Add the following to config/environments/production.rb.

config.lograge.enabled = true
config.lograge.custom_options = lambda do |event|
  options = event.payload.slice(:request_id, :user_id, :visit_id)
  options[:params] = event.payload[:params].except("controller", "action")
  # if you use Searchkick
  if event.payload[:searchkick_runtime].to_f > 0
    options[:search] = event.payload[:searchkick_runtime]
  end
  options
end

Add the following to app/controllers/application_controller.rb.

def append_info_to_payload(payload)
  super
  payload[:request_id] = request.uuid
  payload[:user_id] = current_user.id if current_user
  payload[:visit_id] = ahoy.visit_id # if you use Ahoy
end

Uptime Monitoring

Use an uptime monitoring service like Pingdom or Uptime Robot.

Monitor web servers, background jobs, and scheduled tasks.

Performance Monitoring

Use a performance monitoring service like New Relic or AppSignal.

Be sure to monitor:

Web Requests

  • requests by action - total time, count
  • queue time - X-Request-Start header

Background Jobs and Rake Tasks

  • jobs by type - total time, count

Data Stores - Database, Elasticsearch, Redis

  • requests by type - total time, count
  • CPU usage
  • space

External Services

  • requests by type - total time, count

Additional Monitoring

Use Notable to track notable requests and background jobs. 💎 disclaimer: one of my gems

  • errors
  • slow requests, jobs, and timeouts
  • 404s
  • validation failures
  • CSRF failures
  • unpermitted parameters
  • blocked and throttled requests

Web Server

Use a high performance web server like Unicorn.

gem 'unicorn'

Security

Use SSL to protect your users. Add the following to config/environments/production.rb.

config.force_ssl = true

Development Bonus

Fix double logging in the Rails console. Create config/initializers/log_once.rb with:

ActiveSupport::Logger.class_eval do
  def self.broadcast(logger)
    Module.new do
    end
  end
end

TODO

  • Redis timeout
  • Elasticsearch timeout
  • Background jobs
  • Scheduled jobs

Thanks

About

Best practices for running Rails in production

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0