Ошибка Dokku + Rails + Postgresql — URI::InvalidURIError: схема postgres не принимает часть реестра: root

Привет, я играю с Dokku в Digital Ocean в качестве альтернативы Heroku. Я прочитал не менее 15 руководств от Digital Ocean и других блогов. Все кажется довольно простым, за исключением того случая, когда я впервые запускаю миграцию rails.

Я получаю ошибку ниже...

root@jibberishkey:~# RAILS_ENV=production rake db:migrate
rake aborted!
URI::InvalidURIError: the scheme postgres does not accept registry part: root:password: (or bad hostname?)
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:36:in `initialize'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:270:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:270:in `resolve_url_connection'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:258:in `resolve_hash_connection'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:215:in `resolve_connection'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:139:in `resolve'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:151:in `block in resolve_all'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:150:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/connection_specification.rb:150:in `resolve_all'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_handling.rb:69:in `resolve'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/core.rb:46:in `configurations='
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/core.rb:48:in `block in <module:Core>'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/concern.rb:120:in `class_eval'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/concern.rb:120:in `append_features'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/base.rb:285:in `include'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/base.rb:285:in `<class:Base>'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/base.rb:270:in `<module:ActiveRecord>'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/base.rb:26:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/ancestry-2.1.0/lib/ancestry/has_ancestry.rb:1:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/ancestry-2.1.0/lib/ancestry.rb:4:in `require_relative'
/app/vendor/bundle/ruby/2.0.0/gems/ancestry-2.1.0/lib/ancestry.rb:4:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:76:in `require'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:72:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:72:in `block in require'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:61:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:61:in `require'
/app/vendor/bundle/ruby/2.0.0/gems/bundler-1.6.3/lib/bundler.rb:132:in `require'
/app/config/application.rb:16:in `<top (required)>'
/app/Rakefile:4:in `require'
/app/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)

Я связал свою базу данных postgresql с моим приложением Dokku. Единственное, что я могу предположить, это как-то связано с моей конфигурацией Dokku или с тем, что мой файл database.yml переопределяет настройки конфигурации Dokku. Я просто не могу понять это.

Мой файл database.yml для производства:

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

Моя конфигурация dokku для приложения:

DATABASE_URL:      postgres://root:password:/db
NO_VHOST:          1
rails_env:         production

Я могу подтвердить, что пароль в config такой же, как и в ошибке db:migrate. Это также то же самое, что и в моем приложении Dokku export, которое я нахожу, запуская эту серию команд с сервера...

docker run -i -t dokku/app_name /bin/bash
export HOME=/app
for file in /app/.profile.d/*; do source $file; done
hash -r
export

Кто-нибудь может пролить дополнительный свет?

Спасибо


person Jay Killeen    schedule 16.03.2015    source источник


Ответы (2)


Возможно, это недавняя проблема с плагином dokku-pg-plugin, поскольку мне удалось создать базу данных/подключить приложение к базе данных с помощью более старой версии плагина dokku-pg-plugin.

Я отправил сообщение о проблеме команде проекта, которая может посоветовать: https://github.com/Kloadut/dokku-pg-plugin/issues/69.

person logicalicy    schedule 23.03.2015

Я думаю, что URL-адрес базы данных неверен. Должно получиться postgres://root:password@localhost/db

person IvanSelivanov    schedule 13.09.2019