Мне нужно перенести некоторые данные, и я хотел бы протестировать некоторые модели, которые используют другое соединение, т. Е. Отличное от определенного в database.yml
develoment
, test
группах.
Поэтому я добавил новое соединение с базой данных в database.yml
:
default: &default
adapter: postgresql
encoding: unicode
user: postgres
password:
pool: 5
development:
<<: *default
database: myapp_development
host: <%= ENV['DATABASE_HOST'] %>
test:
<<: *default
database: myapp_test
host: <%= ENV['DATABASE_HOST'] %>
production:
<<: *default
host: <%= ENV['DATABASE_HOST'] %>
database: myapp_production
username: <%= ENV['DATABASE_USER'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
mystore:
adapter: oracle_enhanced
host: <%= ENV['mystore_db_host']%>
port: <%= ENV['mystore_db_port']%>
database: <%= ENV['mystore_db_name']%>
username: <%= ENV['mystore_db_user']%>
password: <%= ENV['mystore_db_password']%>
Далее я создаю класс базовой модели в папке lib/mystore_migration
:
module MystoreMigration
class MystoreModel < ApplicationRecord
self.abstract_class = true
establish_connection(:mystore)
end
end
Другие классы моделей, используемые задачей rake, наследуют вышеуказанный MystoreMigration
класс.
Далее, когда я только что попытался инициализировать одну из моделей, использующих соединение mystore
в тестовом файле RSpec:
MystoreMigration::ShopInfo.new(
address: Faker::Address.street_address,
address2: Faker::Address.street_name,
...
)
и запустить его не удалось:
OCIError:
ORA-12162: TNS:net service name is incorrectly specified
Похоже, что RSpec пытался использовать другие настройки / базу данных или что-то еще вместо того, что я определил с помощью establish_connection(:mystore)
.
Если я добавлю unless Rails.env.test?
условие к establish_connection
:
module MystoreMigration
class MystoreModel < ApplicationRecord
self.abstract_class = true
establish_connection(:mystore) unless Rails.env.test?
end
end
сообщение об ошибке отличается и говорит, что может установить отношения:
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "STORE_INFO" does not exist
LINE 8: WHERE a.attrelid = '"STORE_INFO"'::regclass
Как вы видите, в первом случае он пытался подключиться к базе данных Oracle, но это не удалось. Во втором случае он попытался подключиться к базе данных Postgresql (неправильно, так как он используется в других средах, кроме mystore
).
Если я запускаю задачу rake, которая использует соединение mystore
, она работает, - запуск тестов - не выполняется. Что в этом плохого ?
Я использую Rails 5.2.0
, ruby 2.5.0
, macOS.
Спасибо.