Я использую 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, но решение также не работает.