Подтвердить что ты не робот

`initialize ': схема postgres не принимает часть реестра: postgres: @(или неправильное имя хоста?) (URI:: InvalidURIError) с Docker

Я использую Rails с прикрепленным контейнером Postgres DB Docker. Похоже, что я получаю ниже ошибки, когда я запускаю rails c:

/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/uri/generic.rb:204:in `initialize': the scheme postgres does not accept registry part: postgres:@ (or bad hostname?) (URI::InvalidURIError)

Есть ли причина, почему это не работает?

Мой database.yml:

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

$DATABASE_URL определяется

Интересно, что он работал в течение нескольких дней до вчерашнего дня и сегодня снова не работал.

Ниже приведено, что генерирует Rails 4.2.1!

# As with config/secrets.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="postgres://myuser:[email protected]/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>

Почему бы они не рекомендовали переменную env, которая зарезервирована?

ОБНОВЛЕНИЕ. На самом деле это еще не исправлено. Похоже, что переменная окружения не извлекается из файла database.yml при запуске rails runner, который запускается задачей cron для вызова рабочего задания Sidekiq (используя Whenever). Мне пришлось ставить статическое значение url:, чтобы заставить его работать пока, но при условии, что docker ip меняется каждый раз, когда его запуск из образа я предпочитаю rails runner правильно выбирать переменные среды. Это может быть связано с https://github.com/rails/rails/issues/19256#issuecomment-102980786, но решение также не работает.

4b9b3361

Ответ 1

Переименуйте переменную окружения!

DATABASE_URL зарезервирован Rails и интерпретируется самим ActiveRecord. Я столкнулся с той же проблемой.

Вместо этого используйте что-то вроде этого:

    host:     <%= ENV['DB_HOST'] %>
    password: <%= ENV['DB_PWD'] %>

Ответ 2

В "Настройка приложений Rails" появится, что DATABASE_URL используется для настройки доступа к базе данных. Другим способом настройки доступа к базе данных является наличие файла config/database.yml. Попытка использовать оба метода для настройки доступа к базе данных вызывает проблему, с которой вы сталкиваетесь.

, если ваш пароль содержит небезопасные символы

Строка подключения, используемая для DATABASE_URL, не может содержать специальные символы (что-то, кроме [a-zA-Z0-9_~-\.], например, @ является обычным, чтобы испортить). Решение заключается в кодировке url.

, если вы используете dokku

, если вы используете pghero