Как настроить приложение heroku ci для rails с помощью postgis?

Мое приложение rails 4 использует postgis с адаптером activerecord-postgis-adapter. Я пытаюсь использовать Heroku CI. Запуск ci дает сбой при загрузке структуры базы данных, когда он достигает описания столбца геометрии в файле schema.rb.

-----> Preparing test database

       Running: rake db:schema:load_if_ruby

       The PGconn, PGresult, and PGError constants are deprecated, and will be

       removed as of version 1.0.



       You should use PG::Connection, PG::Result, and PG::Error instead, respectively.



       Called from /app/vendor/bundle/ruby/2.5.0/gems/activesupport-4.2.11.1/lib/active_support/dependencies.rb:240:in `load_dependency'

       rake aborted!

       NoMethodError: undefined method `geometry' for #<ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition:0x000055bd614ea1a0>

       /app/db/schema.rb:105:in `block (2 levels) in <top (required)>'

       /app/vendor/bundle/ruby/2.5.0/gems/activerecord-4.2.11.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:216:in `create_table'
... 

В моем файле database.yml указан адаптер postgis для всех сред, поэтому я удивлен, увидев, что он использует адаптер postgresql.

Какие-либо предложения?

Ранее я записал схему базы данных в sql. На сайте heroku я нашел предложение перейти на рубин. Это не помогло.

Локальные тесты проходят нормально.


person kellyfelkins    schedule 02.11.2019    source источник


Ответы (1)


Я думаю, что это просто проблема с HerokuCI. Обходной путь — перезаписать DATABASE_URL, чтобы указать postgis. Ниже приведены два разных способа сделать это:

  1. Добавьте файл .profile (задокументировано здесь) в корне проекта с следующее содержание:
export DATABASE_URL=`echo $DATABASE_URL | sed s/postgres/postgis/g`
  1. ИЛИ Обновите тестовую команду в вашем app.json:
{
  "environments": {
    "test": {
      "scripts": {
        "test": "export DATABASE_URL=`echo $DATABASE_URL | sed s/postgres/postgis/g`; <other test commands here>",
        ...

Так, например: если DATABASE_URL был postgres://foo:bar@example:5432/my-app, это обновит его до postgis://foo:bar@example:5432/my-app до того, как будет вызвана какая-либо из соответствующих команд.

person parkeristyping    schedule 26.11.2019