Файл JSON не может быть найден при запуске двоичного файла релиза, но он найден при запуске с помощью `iex -S mix phx.server`

#elixir #elixir-mix

#elixir #elixir-mix

Вопрос:

При выполнении следующего действия все работает нормально:

 GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to.json 
MIX_ENV=prod 
DATABASE_URL=... 
SECRET_KEY_BASE=... 
HOST=localhost 
PORT=80 
iex -S mix phx.server
 

Однако при генерации выпуска эликсира с mix release :

 GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to.json 
MIX_ENV=prod 
DATABASE_URL=... 
SECRET_KEY_BASE=... 
HOST=localhost 
PORT=80 
mix release
 

( iex -S mix phx.server заменяется mix release на, а остальное остается тем же)

И запуске его через: _build/prod/rel/app/bin/app start

Я получаю следующую ошибку:

 0:24:29.781 [info] Application goth exited: Goth.start(:normal, []) returned an error: shutdown: failed to start child: Goth.Config
    ** (EXIT) an exception was raised:
        ** (RuntimeError)  Failed to retrieve project data from GCE internal metadata service.
                   Either you haven't configured your GCP credentials, you aren't running on GCE, or both.
                   Please see README.md for instructions on configuring your credentials.
            (goth 1.2.0) lib/goth/config.ex:182: Goth.Config.determine_project_id/2
            (goth 1.2.0) lib/goth/config.ex:73: anonymous fn/2 in Goth.Config.load_and_init/1
            (elixir 1.11.2) lib/enum.ex:1403: anonymous fn/3 in Enum.map/2
            (stdlib 3.13.2) maps.erl:233: :maps.fold_1/3
            (elixir 1.11.2) lib/enum.ex:2197: Enum.map/2
            (goth 1.2.0) lib/goth/config.ex:71: Goth.Config.load_and_init/1
            (stdlib 3.13.2) gen_server.erl:417: :gen_server.init_it/2
            (stdlib 3.13.2) gen_server.erl:385: :gen_server.init_it/6
 

Эта ошибка означает, что GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to.json деталь работала не так, как ожидалось. По какой-то причине файл JSON не может быть найден.

Я могу гарантировать, что файл JSON существует, и кажется, что он просто недоступен из выпуска.

Кто-нибудь знает, почему файл JSON не может быть найден при запуске приложения из выпуска?

Ответ №1:

Настройка среды выполнения для релизов выполняется с config/runtime.exs помощью ( config/releases.exs до v1.11 ) и обсуждается в документации здесь .