This package provides the developer the ability to upload assets to a CDN with single mix command.
Inspired by Vinelab/cdn.
If available in Hex, the package can be installed as:
- Add cdn to your list of dependencies in
mix.exs
:
{:cdn, "~> 0.1.0"}
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,
cache_control: "max-age=#{86400 * 30}",
expires_after: 86400 * 30,
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.
bucket
: A bucket name of s3include
: Setting for upload targetdirectories
: List of upload directory(default
:["priv/static"]
)patterns
: List of upload pattern(default
:["**/*"]
)hidden
: Include hidden files or not
exclude
: Exclude targetsacl
: Default acl for assetscloudfront_url
: URL of CDN endopoint (e.g.https://cloudfonrt.net
)bypass
: Return local asset ifbypass
istrue
in cdn helper.
- Upload to S3
mix cdn.push
- Empty bucket
mix cdn.empty
Import CDN Helper to your dependency
- Phoenix
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"
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request