Как динамически установить schema_format для пользовательских задач rab в db? - PullRequest
0 голосов
/ 10 декабря 2018

Я использую приложение Rails 4.2.5 с двумя разными базами данных.Первый, назовем его db_main, использует формат схемы sql (потому что в этой БД есть некоторые конструкции БД, которые схема ruby не может обработать).Я достиг этого, поместив config.active_record.schema_format = :sql в application.rb.

Теперь есть вторая БД, назовем ее db_other.Эта БД имеет схему ruby, но проблема в том, что ее задачи БД ожидают схему SQL.Я определил все db связанные задачи для этой базы данных следующим образом:

namespace :other do
  task :set_custom_db_config_paths do
    ENV['SCHEMA'] = 'db_other/schema.rb'
    Rails.application.config.paths['db'] = ['other']
    Rails.application.config.paths['db/migrate'] = ['db_other/migrate']
    Rails.application.config.paths['config/database'] = ['config/database_other.yml']
 end

 namespace :db do
   task :migrate => :set_custom_db_config_paths do
   Rake::Task["db:migrate"].invoke
 end

 ... other tasks

 namespace :test do
  task :prepare => :set_custom_db_config_paths do
    # Tried setting ActiveRecord::Base.schema_format = :ruby here, but problem remains
      Rake::Task["db:test:prepare"].invoke
     end
   end
  end
end

При вызове rake other:test:prepare происходит следующее

`psql: db_other / schema.rb: 135: ОШИБКА: синтаксическая ошибка в или около "#" ``

Как я могу настроить так, чтобы rake other:test:prepare принимал схему ruby, а не схему SQL?

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте:

  task :set_custom_db_config_paths do
    ENV['SCHEMA'] = 'db_other/schema.rb'
    Rails.application.config.paths['db'] = ['other']
    Rails.application.config.paths['db/migrate'] = ['db_other/migrate']
    Rails.application.config.paths['config/database'] = ['config/database_other.yml']
    Rails.application.config.active_record.schema_format = :ruby
  end

Обратите внимание на настройку последней строки Rails.application.config.active_record.schema_format = :ruby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...