Skip to content

Instantly share code, notes, and snippets.

View AndrewDryga's full-sized avatar

Andrew Dryga AndrewDryga

View GitHub Profile
@AndrewDryga
AndrewDryga / rel_config.exs
Last active August 19, 2017 13:55
Configuration and Deployment article examples: rel/config.ex
use Mix.Releases.Config,
# This sets the default release built by `mix release`
default_release: :default,
# This sets the default environment used by `mix release`
default_environment: :default
environment :default do
# Copy files into release instead of creating symlink for them
set dev_mode: false
# Do not include ERTS
@AndrewDryga
AndrewDryga / config.exs
Created August 19, 2017 13:56
REPLACE_OS_VARS example
config :myapp_api, :third_party_lib,
cloud_name: "${CLOUDINARY_CLOUD_NAME}",
bucket_name: "${CLOUDINARY_BUCKET_NAME}",
bucket_region: "${CLOUDINARY_BUCKET_REGION}",
frontend_url: "${FRONTEND_URL}"
@AndrewDryga
AndrewDryga / repo.ex
Last active August 22, 2017 10:17
Ecto init callback example
defmodule MyAppAPI.Repo do
use Ecto.Repo, otp_app: :myapp_api
def init(_type, config) do
url = System.get_env("DATABASE_URL")
if url, do: {:ok, [url: url] ++ config}, else: {:ok, config}
end
end
@AndrewDryga
AndrewDryga / endpoint.ex
Created August 19, 2017 13:59
System typles example for Phoenix
defmodule MyAppAPI.Endpoint do
use Phoenix.Endpoint, otp_app: :myapp_api
# ...
@doc """
Callback invoked for dynamically configuring the endpoint.
It receives the endpoint configuration and checks if
configuration should be loaded from the system environment.
"""
@AndrewDryga
AndrewDryga / changeset.ex
Last active August 24, 2017 12:56
on_load Module callback example
defmodule MyAppAPI.Changeset do
import Ecto.Changeset
@on_load :load_buckets
# ...
def load_buckets do
known_buckets = "KNOWN_BUCKETS" |> System.get_env() |> String.split(",", trim: true)
Application.put_env(:myapp_api, :known_buckets, known_buckets)
@AndrewDryga
AndrewDryga / changeset.ex
Created August 19, 2017 14:03
on_load Module callback example (before)
defmodule MyAppAPI.Changeset do
import Ecto.Changeset
@known_buckets Application.get_env(:myapp_api, :known_buckets)
# ...
def changeset(schema, attrs) do
schema
|> cast(attrs, @fields)
@AndrewDryga
AndrewDryga / release_tasks.ex
Last active July 30, 2018 08:29
Elixir Release Tasks
defmodule MyAppAPI.ReleaseTasks do
alias Ecto.Migrator
@otp_app :myapp_api
@start_apps [:logger, :ssl, :postgrex, :ecto]
def migrate do
init(@otp_app, @start_apps)
run_migrations_for(@otp_app)
@AndrewDryga
AndrewDryga / migrate.sh
Last active August 19, 2017 14:51
rel/commands
#!/usr/bin/env bash
/app/bin/myapp command "Elixir.MyAppAPI.ReleaseTasks" migrate
@AndrewDryga
AndrewDryga / rel_config.exs
Created August 19, 2017 14:54
Release config with commands
use Mix.Releases.Config,
default_release: :default,
default_environment: :default
environment :default do
set dev_mode: false
set include_erts: false
set include_src: false
set cookie: :"this_is_a_secret"
# Add release commands
@AndrewDryga
AndrewDryga / Procfile
Last active August 19, 2017 15:22
Files for Elixir deployment to Heroku
release: /app/bin/myapp migrate
web: /app/bin/myapp foreground