Skip to content

Instantly share code, notes, and snippets.


Evan Prothro eprothro

View GitHub Profile
View rails

This is a work in progress.

Domain and Persistence Separation

Our primary motivation for this architecture is separating Domain and Persistence concepts.

  1. When Domain and Persistence logic are mixed together in ActiveRecord Models, the resulting code is hard to reason about, difficult to test well, and resists change.
  • AR Callbacks are a hellish way to manage domain logic
  • Managing different validation contexts is not straightforward
  • There is no clear Domain API (everything is a Model#save side effect)
View foreman


#!/usr/bin/env ruby
require 'fileutils'
include FileUtils

# path to your application root.
APP_ROOT = File.expand_path('..', __dir__)
View error rendering paradigm in

Use a glob route at the bottom of your scopes to catch invalid routes

# config/routes.rb
Rails.application.routes.draw do
  # ... all your scopes and routes
  match "(*any)", to: "application#render_not_found", via: :all
View https apex redirection rails

Heroku DNS

For Heroku to receive traffic at the apex domain ( Your DNS provider must support ANAME / ALIAS resolution for a hostname ( to the apex domain.

GoDaddy does not support this, you can only set up an A record to a static IP address for the apex.

They provide domain forwarding, but this does not work for HTTPS, so requests to will timeout. Their domain forwarding service will only work for forwarding from

If you're using GoDaddy, it is recommended to transfer or switch name servers to a different service (e.g. Namecheap, DNSimple, etc).

eprothro / index.html.haml
Last active Dec 12, 2019
snippets from Materialize starter template from
View index.html.haml
%html{lang: "en"}
%meta{content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
%meta{content: "width=device-width, initial-scale=1, maximum-scale=1.0", name: "viewport"}/
%title Starter Template - Materialize
%link{href: "", rel: "stylesheet"}/
%link{href: "css/materialize.css", media: "screen,projection", rel: "stylesheet", type: "text/css"}/
%link{href: "css/style.css", media: "screen,projection", rel: "stylesheet", type: "text/css"}/
View Sublime Text go to spec or
View sidekiq_depth_printer.rb
# Sidekiq Reporter
# Emit key statistics about Sidekiq queues to a stream.
# Examples:
# Log to STDOUT by default:
# ruby sidekiq_reporter.rb
View .bash_profile.bash
# ~/.bash_profile
if [ -f `brew --prefix`/etc/bash_completion ]; then
. `brew --prefix`/etc/bash_completion
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
source ~/
View heroku logstash config
input {
  # translate syslog messages into logstash events
  # with priority field, fields added by SYSLOGLINE pattern
  # (e.g. timestamp, logsource, program, pid, etc.) and the 
  # rest of the syslog string in the message field
  syslog {
    # port => 514
    # codec => plain
    # syslog_field => "message"
View generate aes key.rb
require 'openssl'
require 'base64'
cipher ="aes-256-cbc")
key = cipher.random_key
value = Base64.strict_encode64(key)
You can’t perform that action at this time.