`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, но решение также не работает.
Ответы
Ответ 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