#php-7 #cakephp-3.x
#php-7 #cakephp-3.x
Вопрос:
В настоящее время у меня есть две настройки базы данных в моем config/app.php , один с именем «default» для производства, другой с именем «test» для разработки. Теперь я хочу переименовать текущий «test» в «dev» и сделать 3-ю настройку, назвав ее новым «test» для целей тестирования. Переключение между производственной базой данных и базой данных разработки работает нормально, но как мое приложение узнает, когда использовать тестовую базу данных, пока я все еще в среде разработки (работаю над веткой разработки)? Какие изменения я должен внести в какие файлы? Я весь день гуглил, но все, что я могу найти, это способ переключения между производством и разработкой. Мне нужно знать, как переключаться между разработкой и тестированием.
Ниже приведено то, что я имею в виду, но я уверен, что мне нужно также изменить некоторые другие файлы, чтобы заставить их работать правильно.
# config/app.php
'Datasources' => [
// Production
'default' => [
'className' => 'CakeDatabaseConnection',
'driver' => 'CakeDatabaseDriverMysql',
'persistent' => false,
'host' => 'MY PRODUCTION HOST',
'username' => 'MY PRODUCTION USERNAME',
'password' => 'MY PRODUCTION PASSWORD'
'database' => 'MY PRODUCTION DATABASE NAME'
'quoteIdentifiers' => false,
// 'encoding' and so on...
],
// Development
'dev' => [
'className' => 'CakeDatabaseConnection',
'driver' => 'CakeDatabaseDriverMysql',
'persistent' => false,
'host' => 'MY DEVELOPMENT HOST',
'username' => 'MY DEVELOPMENT USERNAME',
'password' => 'MY DEVELOPMENT PASSWORD'
'database' => 'dev'
'quoteIdentifiers' => false,
// 'encoding' and so on...
],
// Test
'test' => [
'className' => 'CakeDatabaseConnection',
'driver' => 'CakeDatabaseDriverMysql',
'persistent' => false,
'host' => 'SAME AS MY DEVELOPMENT HOST',
'username' => 'SAME AS MY DEVELOPMENT USERNAME',
'password' => 'SAME AS MY DEVELOPMENT PASSWORD'
'database' => 'test'
'quoteIdentifiers' => false,
// 'encoding' and so on...
]
],
Я совершенно новичок в CakePHP, поэтому буду признателен за любые советы / предложения. Спасибо!
Ответ №1:
Одним из способов было бы установить переменную среды в вашей среде разработки, которая не установлена в производстве, например:
DEV_ENVIRONMENT=true
В сценарии запуска приложения в config/bootstrap.php
вы можете найти эту переменную среды, и если она установлена, вы можете псевдоним default
соединения с dev
:
В bootstrap.php:
// Look for this line:
ConnectionManager::setConfig(Configure::consume('Datasources'));
// Add your code someplace after that:
if(getenv('DEV_ENVIRONMENT')){
ConnectionManager::alias('dev', 'default');
}
Функция псевдонима будет загружать dev
источник данных каждый раз default
, когда в приложении упоминается соединение (что делают все таблицы, если они не переопределены).
Обычно это тот же метод, который тесты PHPUnit используют для замены конфигураций test
источника данных во время тестовых запусков.