Deploy to Digital Ocean using Distillery & edeliver

Hi guys,

Im getting some issue deploying to DO

When I try to run this
mix edeliver build release

It shows this error

BUILDING RELEASE OF PROJECT APP ON BUILD HOST

-----> Authorizing hosts
-----> Ensuring hosts are ready to accept git pushes
-----> Pushing new commits with git to: user@ipaddress
-----> Resetting remote hosts to ad76a770fcda0ef2dd622ae3a344db3e3d617f70
-----> Cleaning generated files from last build
-----> Fetching / Updating dependencies
using mix to fetch and update deps
** (CompileError) config/prod.secret.exs:1: undefined function e/1
    (elixir) lib/code.ex:232: Code.eval_string/3
    (mix) lib/mix/config.ex:187: anonymous fn/2 in Mix.Config.__import__!/2
    (elixir) lib/enum.ex:1940: Enum."-reduce/3-lists^foldl/2-0-"/3

Here’s my .deliver/config

APP="project"

BUILD_HOST="ipaddress"
BUILD_USER="user"
BUILD_AT="/home/user/app_build"

PRODUCTION_HOSTS="ipaddress" 
PRODUCTION_USER="user" 
DELIVER_TO="/home/user/app_release" 

pre_erlang_get_and_update_deps() {
  local _prod_secret_path="/home/user/app_config/prod.secret.exs"
  if [ "$TARGET_MIX_ENV" = "prod" ]; then
    __sync_remote "
      ln -sfn '$_prod_secret_path' '$BUILD_AT/config/prod.secret.exs'
    "
  fi
}

I already check prod.secret.exs is available in the server

Im following this tutorial https://www.digitalocean.com/community/tutorials/how-to-automate-elixir-phoenix-deployment-with-distillery-and-edeliver-on-ubuntu-16-04

Thanks guys

Hi azimlord,

According to the error message there is an error in your prod.secret.exs, on the line 1 apparently.

1 Like

Check your prod.secret.exs file to make sure there isn’t any typos in it.

config/prod.secret.exs:1: undefined function e/1

Sounds to me like a problem compiling the file not that it isn’t being found.

Hi mcostasilva & sanswork,

I dont think theres any issue with the prod.secret.exs
Here’s my prod.secret.exs

use Mix.Config

# In this file, we keep production configuration that
# you'll likely want to automate and keep away from
# your version control system.
#
# You should document the content of this
# file or create a script for recreating it, since it's
# kept out of version control and might be hard to recover
# or recreate for your teammates (or yourself later on).
config :project, ProjectWeb.Endpoint,
  secret_key_base: "AnQL+w2yvjz12cxcjmC5lHF8cFiBHQ3Vf+cpSFcs6FfOaJBbgqA4byRcssYW5P3V"

# Configure your database
config :project, Project.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "project_prod",
  pool_size: 15

In server

azim@ubuntu-s-1vcpu-1gb-sgp1-01:~$ ls app_build/config/
config.exs  dev.exs  prod.exs  prod.secret.exs  test.exs

Weird…

cat app_build/config/ on the server shows the content you posted?

Yup

azim@ubuntu-s-1vcpu-1gb-sgp1-01:~$ cat app_build/config/prod.secret.exs
e Mix.Config

# In this file, we keep production configuration that
# you'll likely want to automate and keep away from
# your version control system.
#
# You should document the content of this
# file or create a script for recreating it, since it's
# kept out of version control and might be hard to recover
# or recreate for your teammates (or yourself later on).
config :project, ProjectWeb.Endpoint,
  secret_key_base: "AnQL+w2yvjz12cxcjmC5lHF8cFiBHQ3Vf+cpSFcs6FfOaJBbgqA4byRcssYW5P3V"

# Configure your database
config :project, Project.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "project_prod",
  pool_size: 15

Anyway, I have a temporary fix for this. Move all prod.secret.exs to prod.exs and remove prod.secret.exs from prod

You’re missing “us” at the start of that.

e Mix.Config

on the first line.

1 Like

FML :sweat:

Thanks. My mistake

1 Like