I’ve some problems deploying my existing application to aws’s elastic beanstalk.
I’m struggling with the environment variables because I’m receiving the following error from the logs:
-------------------------------------
/var/log/eb-docker/containers/eb-current-app/unexpected-quit.log
-------------------------------------
(db_connection) lib/db_connection/connection.ex:69: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: nil
11:05:31.352 [error] GenServer #PID<0.477.0> terminating
** (RuntimeError) connect raised KeyError exception: key :database not found. The exception details are hidden, as they may contain sensitive data such as database credentials. You may set :show_sensitive_data_on_connection_error to true when starting your connection if you wish to see all of the details
(elixir) lib/keyword.ex:393: Keyword.fetch!/2
(postgrex) lib/postgrex/protocol.ex:92: Postgrex.Protocol.connect/1
(db_connection) lib/db_connection/connection.ex:69: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: nil
My prod.exs
looks like this:
use Mix.Config
config :supercoolapplication, SuperCoolApplicationWeb.Endpoint,
http: [port: {:system, "PORT"}, compress: true],
url: [scheme: "http", host: System.get_env("HOST"), port: {:system, "PORT"}],
secret_key_base: System.get_env("SECRET_KEY_BASE"),
code_reloader: false,
cache_static_manifest: "priv/static/cache_manifest.json",
server: true
# Do not print debug messages in production
config :logger, level: :info
config :phoenix_crud, PhoenixCrud.Repo,
adapter: Ecto.Adapters.Postgres,
database: System.get_env("RDS_DB_NAME"),
username: System.get_env("RDS_USERNAME"),
password: System.get_env("RDS_PASSWORD"),
hostname: System.get_env("RDS_HOSTNAME"),
port: System.get_env("RDS_PORT") || 5432,
pool_size: 20,
ssl: true
I basically followed this tutorial on thoughtbot.
My Dockerfile
looks like this:
FROM bitwalker/alpine-elixir-phoenix:latest
# Set exposed ports
EXPOSE 4000
ENV PORT=4000 MIX_ENV=dev
# Cache elixir deps
ADD mix.exs mix.lock ./
RUN mix do deps.get, deps.compile
# Same with npm deps
ADD assets/package.json assets/
RUN cd assets && \
npm install
ADD . .
# Run frontend build, compile, and digest assets
RUN cd assets/ && \
npm run deploy && \
cd - && \
mix do compile, phx.digest
USER default
CMD ["mix", "phx.server"]
I created my elastic beanstalk environment like the following:
eb create \
--database \
-db.engine postgres \
-db.i db.t2.small \
-db.size 10 \
-db.version 9.4.5 \
--envvars MIX_ENV=prod,SECRET_KEY_BASE=heregoesmyprettysecurekey,PORT=4000
Has anyone an idea what is going wrong on my side?
And I’m also questioning myself on how I should actually run the mix ecto.create
task and then after every deployment the mix ecto.migrate
task…
I would be happy about any help!!!