PHX Releases build failed with non-existing domain

Hello Devs,
Using this tutorial Deploying with Releases — Phoenix v1.5.9 _build/prod/rel/my_app/bin/my_app start failed with

11:50:50.507 [info] Access BgsiteOfficialWeb.Endpoint at http://example.com
11:50:50.507 [error] Postgrex.Protocol (#PID<0.3536.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (HOST:5432): non-existing domain - :nxdomain

I tried to change the domain with my own and also localhost but nothing worked (in config/prod.exs).

Any thoughts?

Can you please show the content of config/prod.exs? What is the value of the DATABASE_URL environment variable?

#config/prod.exs

use Mix.Config

# For production, don't forget to configure the url host
# to something meaningful, Phoenix uses this information
# when generating URLs.
#
# Note we also include the path to a cache manifest
# containing the digested version of static files. This
# manifest is generated by the `mix phx.digest` task,
# which you should run after static files are built and
# before starting your production server.
config :bgsite_official, BgsiteOfficialWeb.Endpoint,
  url: [host: "example.com", port: 80],
  cache_static_manifest: "priv/static/cache_manifest.json"

# Do not print debug messages in production
config :logger, level: :info

# ## SSL Support
#
# To get SSL working, you will need to add the `https` key
# to the previous section and set your `:url` port to 443:
#
#     config :bgsite_official, BgsiteOfficialWeb.Endpoint,
#       ...
#       url: [host: "example.com", port: 443],
#       https: [
#         port: 443,
#         cipher_suite: :strong,
#         keyfile: System.get_env("SOME_APP_SSL_KEY_PATH"),
#         certfile: System.get_env("SOME_APP_SSL_CERT_PATH"),
#         transport_options: [socket_opts: [:inet6]]
#       ]
#
# The `cipher_suite` is set to `:strong` to support only the
# latest and more secure SSL ciphers. This means old browsers
# and clients may not be supported. You can set it to
# `:compatible` for wider support.
#
# `:keyfile` and `:certfile` expect an absolute path to the key
# and cert in disk or a relative path inside priv, for example
# "priv/ssl/server.key". For all supported SSL configuration
# options, see https://hexdocs.pm/plug/Plug.SSL.html#configure/1
#
# We also recommend setting `force_ssl` in your endpoint, ensuring
# no data is ever sent via http, always redirecting to https:
#
#     config :bgsite_official, BgsiteOfficialWeb.Endpoint,
#       force_ssl: [hsts: true]
#
# Check `Plug.SSL` for all available options in `force_ssl`.

# Finally import the config/prod.secret.exs which loads secrets
# and configuration from environment variables.
import_config "releases.exs"
export DATABASE_URL=ecto://USER:PASS@HOST/database

This is an example value. You need to replace it with a proper one. For locally running PostgreSQL this would be something like postgresql://postgres:postgres@localhost:5432/my_app_dev.

5 Likes

I’m having the same issue as the original poster, but the example values are changed to those for my machine and database. So far I’ve been able to setup and log into the psql database remotely, albeit on the same machine but with the ip instead of with “localhost” from the terminal. I found that I don’t have a “domain” set up in the database. Do I need that to connect a release build of my app to the database? Also, I’m trying to just keep using the _dev database for now. Would that cause issues?

Possibly the psql daemon is configured to only listen on the external IP?

Ok, not sure how to change it but it’s something to look into. Thank you for the advice soup.

Ended up just changing the ip to localhost, which works for what I need.

I’m having the same problem

20:40:52.634 [error] Postgrex.Protocol (#PID<0.1082.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (“189.189.189.129”:5432): non-existing domain - :nxdomain

I thought it was a network problem…
But it is not, because I did several network tests.

My config/prod looks like this:

config :myproject, Myproject.RepoTwo,
  username: System.get_env("USERNAME"),
  password: System.get_env("PASSWORD"),
  database: System.get_env("DATABASE"),
  hostname: System.get_env("HOSTNAME"),
  show_sensitive_data_on_connection_error: true,
  pool_size: System.get_env("POOL_SIZE") || 3

On my Mac, inside /usr/local/var/postgres/pg_hba.conf:

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Did the job. It should allow you to do psql -h localhost ... and have local access from Ecto (or whatever else really) without problems.

Not sure I can deduce something from the config you posted but have you tried a simple ping 189.189.189.129 from inside your app’s server?

yes,
I even made a telnet at that address and it closed normally.

I managed to find the communication failure.

If you notice this error, my IP is receiving as a string “”.
I removed the “”, and everything was resolved.


12:22:49.199 [error] Postgrex.Protocol (#PID<0.472.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect ("189.189.189.129":5432): non-existing domain - :nxdomain
1 Like