Elixir CDN Assets Manager

Build Statushex.pm versionhex.pm

Content Delivery Network Package for Elixir/Phoenix.

This package provides the developer the ability to upload assets to a CDN with single mix command.
Inspired by Vinelab/cdn.

Overview

Installation

If available in Hex, the package can be installed as:

  1. Add cdn to your list of dependencies in mix.exs:
{:cdn, "~> 0.0.1"}

Configuration

Firstly this package is relies on ex_aws then setting ex_aws before configuration.

:ex_aws must always be added to your applications list.

def application do
  [applications: [:ex_aws, :httpoison, :poison]]
end

Export your AWS access key ID and Secret to your environmet variable(recommend)

export AWS_ACCESS_KEY_ID=your_access_key_id
export AWS_SECRET_ACCESS_KEY=your_secret_access_key

or set config in mix.exs.

config :ex_aws,
  access_key_id: [{:system, "AWS_ACCESS_KEY_ID"}, :instance_role],
  secret_access_key: [{:system, "AWS_SECRET_ACCESS_KEY"}, :instance_role]

and set your region.

config :ex_aws,
  region: "us-east-1"

After that Configure :cdn in config.exs.(Example)

config :cdn,  bucket: "assets.foo",
              include: [
                directories: ["priv/static", "public/bin"],
                patterns: ["**/*", "**/*.css"],
                hidden: true
              ],
              exclude: [
                directories: [],
                patterns: [],
                hidden: true
              ],
              acl: :public_read,
              cloudfront_url: "https://asset.s3.amazonaws.com",
              bypass: false

This means it should be include files matched pattern **/* or **/*.css in priv/static or public/bin. Also includes hidden files(filename starts with .). And base url for asset helper is https://asset.s3.amazonaws.com, but always outputs local file url for asset helper because bypass is false.

Usage

Commands

mix cdn.push
mix cdn.empty

Asset Helper

Import CDN Helper to your dependency

web.ex

def view do
  quote do
    ...
    # Import CDN helper
    import Cdn.Helpers
    ...
  end
end

then you can load static file like this.

<%= cdn(static_path(@conn, "/css/app.css")) %>

# MIX_ENV=dev
<%= cdn(static_path(@conn, "/css/app.css")) %> #=> "/css/app.css"

# MIX_ENV=prod
<%= cdn(static_path(@conn, "/css/app.css")) %> #=> "https://assets.cloudfront.net/css/app.css"

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request