zimt28
Phoenix doesn't serve static files
Hi there,
I just managed to deploy my first Phoenix app using edeliver. The only problem left are static files, which Phoenix doesn’t serve right now: When I try to access /css/app.css, I get Phoenix 404 page.
I’ve added the following to my .deliver/config file:
pre_erlang_clean_compile() {
status "Running phoenix.digest" # log output prepended with "----->"
__sync_remote " # runs the commands on the build host
[ -f ~/.profile ] && source ~/.profile # load profile (optional)
set -e # fail if any command fails (recommended)
cd '$BUILD_AT' # enter the build directory on the build host (required)
# prepare something
mkdir -p priv/static # required by the phoenix.digest task
# run your custom task
APP='$APP' MIX_ENV='$TARGET_MIX_ENV' $MIX_CMD phoenix.digest $SILENCE
"
}
In my config/prod.exs file, I’ve got the following configuration:
# (PORT is "80" and URL is the server's IP)
config :app, App.Endpoint,
http: [port: {:system, "PORT"}],
url: [host: {:system, "URL"}, port: 80],
cache_static_manifest: "priv/static/manifest.json"
config :app, App.Endpoint, root: "."
When I run mix phoenix.digest and MIX_ENV=prod mix release --prod locally, phoenix serves my static files though.
EDIT: On my build server, /tmp/edeliver/app/builds/priv only contains a manifest.json file, which again just consists of an empty object {}. The static files do exist inside of /tmp/edeliver/app/builds/web/static.
EDIT 2: I’ve changed the last line of my .deliver/config file to the following:
APP='$APP' MIX_ENV='$TARGET_MIX_ENV' $MIX_CMD phoenix.digest web/static -o priv/static $SILENCE
The mix phoenix.digest thing seems to work now, but I have to run brunch before somehow. How can I do that?
Marked As Solved
zimt28
All right, looks like I found a working solution. Just in case someone has similar problem, here’s a .deliver/config file, that works for me:
#!/usr/bin/env bash
APP="app"
BUILD_HOST="123.45.67.8"
BUILD_USER="root"
BUILD_AT="/tmp/edeliver/app/builds"
STAGING_HOSTS="123.45.67.8"
STAGING_USER="root"
DELIVER_TO="/home/web"
pre_erlang_get_and_update_deps() {
local _prod_secret_path="/home/builder/prod.secret.exs"
if [ "$TARGET_MIX_ENV" = "prod" ]; then
__sync_remote "
ln -sfn '$_prod_secret_path' '$BUILD_AT/config/prod.secret.exs'
"
fi
}
pre_erlang_clean_compile() {
status "Installing NPM dependencies"
__sync_remote " # runs the commands on the build host
[ -f ~/.profile ] && source ~/.profile # load profile
set -e # fail if any command fails
cd '$BUILD_AT' # go to the build directory on the build host
npm install $SILENCE
"
status "Building static files"
__sync_remote "
[ -f ~/.profile ]
set -e
cd '$BUILD_AT'
mkdir -p priv/static
npm run deploy $SILENCE
"
status "Running phoenix.digest"
__sync_remote "
[ -f ~/.profile ] && source ~/.profile
set -e
cd '$BUILD_AT'
APP='$APP' MIX_ENV='$TARGET_MIX_ENV' $MIX_CMD phoenix.digest $SILENCE
"
}








