Переключение БД между производством, разработкой и тестированием в CakePHP3 - PullRequest
0 голосов
/ 22 апреля 2019

В настоящее время у меня есть два параметра базы данных в моем config / app.php, один с именем «default» для производства, другой с именем «test» для разработки.Теперь я хочу переименовать текущий «тест» в «dev» и сделать третий параметр, назвав его новым «тест» для целей тестирования.Переключение между производственной базой данных и базой данных разработки работает нормально, но как мое приложение узнает, когда использовать тестовую базу данных, пока я все еще нахожусь в среде разработки (работающей в ветви разработки)?Какие изменения я должен внести в какие файлы?Я весь день гуглил, но все, что я могу найти, - это способ переключаться между производством и разработкой.Мне нужно знать, как переключаться между разработкой и тестированием.

Ниже я кое-что имею в виду, но я уверен, что мне нужно изменить и другие файлы, чтобы они работали правильно.

# config/app.php

'Datasources' => [

  // Production
  'default' => [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    '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' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    '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' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    '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 Ответ

1 голос
/ 23 апреля 2019

Одним из методов будет установка переменной среды в вашей среде разработки, которая не задана в рабочей среде, например:

DEV_ENVIRONMENT=true

В сценарии запуска приложения в config/bootstrap.php вы можете искать эту средупеременная, и если она установлена, вы можете использовать псевдоним default с помощью dev:

In 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 конфигах источника данных во время тестовых прогонов.

...