Как получить SQLLite для переноса специфической миграции Postgres?

0

Я запускаю Rails 5 и Postgres 9.4. У меня есть эта миграция Postgres, чтобы я мог быстро искать LIKE...

class AddTrgmIndex < ActiveRecord::Migration[5.0]
  def change
    execute <<-SQL
      CREATE INDEX trgm_idx_person_name ON people USING gin (name gin_trgm_ops);
    SQL
  end
end

Однако, когда я пытаюсь выполнить единичный тест (используя minitest), SQLLite не любит мой специфический синтаксис Postgres и бросает следующую ошибку

localhost:myproject davea$ rails test test/controllers/people_controller_test.rb
Running via Spring preloader in process 68189
rails aborted!
ActiveRecord::StatementInvalid: SQLite3::SQLException: near "gin_trgm_ops": syntax error: CREATE  INDEX "trgm_idx_person_name" ON "people" (name gin_trgm_ops)
/Users/davea/.rvm/gems/ruby-2.4.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in 'initialize'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in 'new'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in 'prepare'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:137:in 'execute'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:232:in 'block in execute'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract_adapter.rb:590:in 'block in log'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/notifications/instrumenter.rb:21:in 'instrument'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract_adapter.rb:583:in 'log'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:232:in 'execute'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/schema_statements.rb:713:in 'add_index'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/schema_statements.rb:282:in 'block in create_table'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/schema_statements.rb:281:in 'each'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.6/lib/active_record/connection_adapters/abstract/schema_statements.rb:281:in 'create_table'

Есть ли способ, с помощью которого SqlLite может игнорировать миграцию или есть какой-то другой способ перезаписи, который сделает обе базы данных счастливыми?

  • 2
    Вы можете поймать это исключение ... но в основном люди решают эту проблему, убедившись, что их локальная тестовая среда соответствует их рабочей среде ... потому что в противном случае вы никогда не сможете протестировать все те же аспекты, работающие так, как они должны.
Теги:
unit-testing
ruby-on-rails-5
minitest

1 ответ

1

Чтобы ответить на ваш вопрос, вы можете проверить тип базы данных, используя:

ActiveRecord::Base.connection.instance_values["config"][:adapter]

Что вы можете использовать для условного запуска миграции.

однако я также согласен с комментарием Тарина

  • 0
    Но я уже знаю, что тип базы данных SQLLite на основе ошибки. Это то, что вы объясняете?
  • 0
    После создания миграции AddTrgmIndex вы смогли успешно применить эти изменения к БД.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню