Я запускаю 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 может игнорировать миграцию или есть какой-то другой способ перезаписи, который сделает обе базы данных счастливыми?
Чтобы ответить на ваш вопрос, вы можете проверить тип базы данных, используя:
ActiveRecord::Base.connection.instance_values["config"][:adapter]
Что вы можете использовать для условного запуска миграции.
однако я также согласен с комментарием Тарина