Как изменить DATABASE_URL для приложения heroku

Я хотел использовать внешнюю базу данных с моим приложением heroku. Но я не могу редактировать файлы конфигурации. Я пробовал использовать графический интерфейс, в котором говорится, что нельзя перезаписать значения вложений DATABASE_URL. Хотя я тоже пробовал использовать CLI. Я использовал команду: heroku config:addDATABASE_URL="postgresql://username:password@IP:PORT". Однако это вызывает ошибку ... is not a heroku command.


person Ninja Boy    schedule 28.01.2016    source источник
comment
моя беда, опечатка при редактировании. в команде, кстати, был знак '=', но это не сработало   -  person Ninja Boy    schedule 28.01.2016
comment
Пожалуйста, опубликуйте весь вывод сообщения об ошибке. heroku config:add VAR="VAL" определенно должен работать.   -  person eugen    schedule 28.01.2016
comment
Установка переменных конфигурации и перезапуск app-name ... готово VAR: VAL   -  person Ninja Boy    schedule 28.01.2016
comment
Я имел в виду ваше сообщение об ошибке, не пробуйте мой пример, просто чтобы показать, как должен выглядеть синтаксис. В любом случае документация Heroku находится по адресу devcenter.heroku.com/articles/config-vars.   -  person eugen    schedule 28.01.2016


Ответы (7)


Опробовав большинство этих ответов, в 2016 году я наткнулся на обновление здесь: сначала необходимо отсоединить базу данных, а затем обновить переменную DATABASE_URL.

heroku addons:attach heroku-postgresql -a <app_name> --as HEROKU_DATABASE
heroku addons:detach DATABASE -a <app_name>
heroku config:add DATABASE_URL=
person 0bserver07    schedule 29.02.2016
comment
+1 Пришлось отсоединить текущую базу данных перед установкой DATABASE_URL. Сделал это при переходе с Heroku Postgres на RDS на AWS. - person Pattay; 27.07.2016
comment
Я столкнулся с ошибкой. Невозможно уничтожить последнее вложение в приложение биллинга для ресурса с помощью этого метода, и мне пришлось уничтожить мою базу данных Heroku до ее отсоединения (см .: stackoverflow.com/questions/30611801/). С другой стороны, вы можете создать новую базу данных Heroku, продвинуть ее, как указано ниже, а затем уничтожить, чтобы также освободить эту блокировку. После этого вы можете установить внешний URL-адрес (например, RDS) с помощью config: add или config: set. - person Matt; 20.09.2018

Альтернативный метод, который не требует отсоединения (что может быть нежелательным результатом переключения), состоит в том, чтобы просто присоединить новую базу данных и затем продвигать ее, что Документы Heroku явно указывает как способ установки DATABASE_URL.

heroku addons:attach heroku-postgresql -a <app_name>
heroku pg:promote heroku-postgresql -a <app_name>
person andrewjt    schedule 19.07.2017
comment
Мне пришлось использовать эту версию вместо отсоединения, а затем добавить config. - person Matt; 19.09.2018
comment
Это сработало для меня. Обратите внимание, что вам нужно заменить heroku-postgresql именем новой базы данных, к которой вы хотите присоединиться. Его можно найти на странице обзора вашего приложения в Heroku Postgres. - person AfromanJ; 10.01.2019

У меня сегодня такая же ситуация, когда мне нужно изменить postgres на postgis. Отключение у меня не работает, поэтому я сделал это с database.yml:

production:

  url: <%= ENV['DATABASE_URL'].sub(/^postgres/, "postgis") %>

https://github.com/rgeo/activerecord-postgis-adapter/issues/214.

person Tan Duong    schedule 02.01.2017

Как объясняется в этой статье, правильный синтаксис для установки / добавления переменной конфигурации:

$ heroku config:set DATABASE_URL="postgresql://username:password@IP:PORT"

Однако похоже (см. Комментарии) DATABASE_URL устарел, и попытка его обновления вызовет ошибку.

person Simone Carletti    schedule 28.01.2016
comment
Эй, выдает ошибку. Невозможно перезаписать значения вложений DATABASE_URL. - person Ninja Boy; 28.01.2016
comment
Heroku обесценил обновление database_url - так говорится в некоторых сообщениях stackoverflow. - person Ninja Boy; 28.01.2016
comment
Спасибо. Я обновил ответ, на случай, если кто-то еще наткнется на эту ветку. - person Simone Carletti; 28.01.2016
comment
Спасибо. Я добавил ответ с обходным путем, который сработал для меня. Не стесняйтесь поделиться им. - person Ninja Boy; 28.01.2016

Решил это. Просто для справки пользователей, у которых есть такая же проблема или которые хотят иметь аналогичную реализацию. Вот обходной путь, который сработал для меня.

Heroku больше не перезаписывает databse.yml, поэтому я просто изменил DATBASE_URL в database.yml и вставил его :)

Это тоже сработало!

Источник: https://discussion.heroku.com/t/rails-4-1-database-yml-no-longer-overwritten-on-heroku/550

person Ninja Boy    schedule 28.01.2016
comment
Ссылка больше не работает, можете ли вы привести пример database.yml и куда этот файл депонировать? - person jcstritt; 20.03.2016
comment
Просто зайдите в панель управления heroku ›базы данных› удалите базу данных; Вернитесь в config / database.yml и введите детали базы данных. Как это gist.github.com/pbssubhash/705dfb538aea75ee9ab3 Однако жестко кодировать значения не рекомендуется. , пока мы не найдем лучший, вы можете следить за этим. Прокомментируйте здесь, если у вас все еще есть проблемы, я буду рад помочь @jcstritt - person Ninja Boy; 22.03.2016
comment
Итак, вы поместили свой database.yml в систему управления версиями? - person Anthony To; 24.04.2016
comment
Да @AnthonyTo. Я сделал. - person Ninja Boy; 24.04.2016
comment
Вы всегда можете поместить фактический URL-адрес в переменную окружения и отправить его в Heroku, используя что-то вроде гема фигаро. - person ardochhigh; 10.06.2017

Основываясь на документах Heroku, это как вы бы делили базу данных с несколькими приложениями.

heroku addons:attach my-originating-app::DATABASE --app sushi
person Andrei Erdoss    schedule 02.11.2018

В моем случае мне нужно было запустить приложение загрузки java spring с моей личной базой данных (postgres). У меня есть экземпляр на AWS, и при загрузке приложения произошла ошибка, потому что он подключается без ssl.

Учитывая эту документацию (https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#using-ssl-with-postgresql), говорится:

Раньше мы предлагали добавить параметр URL sslmode = disable в URL-адреса JDBC. Теперь нам требуется использовать SSL для всех новых баз данных Heroku Postgres. Мы будем принудительно использовать SSL во всех базах данных Heroku Postgres с марта 2018 года. Пожалуйста, не отключайте SSL для своей базы данных, иначе ваши приложения могут сломаться.

Итак, возвращаясь к шагу 1, я удалил свой аддон Heroku Postgres на вкладке «Ресурсы». Шаг 2, я изменил свой application.yml с:

datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://<url>:<port>/<dataBaseName>?createDatabaseIfNotExist=true&useSSL=false
    username: <user>
    password: <pass>

to

datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://<url>:<port>/<dataBaseName>?createDatabaseIfNotExist=true&useSSL=false&sslmode=disable
    username: <user>
    password: <pass>

Я добавил & sslmode = disable в конец строки url.

И, наконец, перестроить / развернуть (что в моем случае происходит автоматически после добавления в репо на github).

Надеюсь, это кому-то поможет.

Мир...

person Alex T    schedule 29.06.2020