@erfan saif와 같이 magento는 1.6부터 다중 RDBMS를 지원합니다. 그러나 실제 세계에서는 mysql 백엔드 만 알고 있습니다.
magento는 백엔드마다 다른 설치 / 업그레이드 / 데이터 스크립트를 가질 수 있다는 점을 이해해야합니다. mysql에서 지원하지만 표준 SQL에서는 지원하지 않는 특수 인덱스 유형을 원한다면 mysql4-install-1.0.0.php 스크립트를 구현할 수 있습니다. 스크립트가 일반적인 경우 install-1.0.0.php를 사용하십시오.
Mage_Core_Model_Resource_Setup을 살펴보면 두 가지 조사 대상을 찾을 수 있습니다.
- 파일 이름을 지정할 수 있습니다 (% s-) % s-VERSION. (php | sql)
- 두 개의 설치 스크립트가있는 경우 (데이터 스크립트와 동일하지만 (app / code / core / Mage / Core / Model / Resource / Setup.php : 520)) magento는 일반 스크립트보다 특수 스크립트를 선호합니다 (하나로서) 기대할 것이다)
app / code / core / Mage / Core / Model / Resource / Setup.php : 488
$regExpDb = sprintf('#^%s-(.*)\.(php|sql)$#i', $actionType);
$regExpType = sprintf('#^%s-%s-(.*)\.(php|sql)$#i', $resModel, $actionType);
while (false !== ($file = $handlerDir->read())) {
$matches = array();
if (preg_match($regExpDb, $file, $matches)) {
$dbFiles[$matches[1]] = $filesDir . DS . $file;
} else if (preg_match($regExpType, $file, $matches)) {
$typeFiles[$matches[1]] = $filesDir . DS . $file;
}
}
[...]
foreach ($typeFiles as $version => $file) {
$dbFiles[$version] = $file;
}
스크립트 이름을 지정 .sql
하면 데이터베이스에 직접 호출됩니다.
// app/code/core/Mage/Core/Model/Resource/Setup.php:621
switch ($fileType) {
case 'php':
$conn = $this->getConnection();
$result = include $fileName;
break;
case 'sql':
$sql = file_get_contents($fileName);
if (!empty($sql)) {
$result = $this->run($sql);
또한 설정 스크립트가 실행 중이 아닌 이유를 찾기 위해 어떻게해야합니까?
설치 / 업그레이드 파일의 시작 부분에있는 die ( 'sadf')를 선호합니다. 호출하면 여러 번 실행할 수 있기 때문에 설정 한 모든 변수가 올바른지 확인할 수 있습니다. 데이터베이스. 화면에 'sadf'가 표시되면 스크립트가 실행중인 것입니다.
sadf 대신 magento 가로 드되고 디버깅 할 시간입니다. 두 가지 표준 오류는 다음과 같습니다.
- 구성에 스크립트를 추가하는 것을 잊었습니다.
- 나는의 디렉토리가
sql/
잊어 버린, 예를 들어, sql/install-1.0.0.php
대신을sql/my_module_setup/install-1.0.0.php
그리고 여기에 적합하다고 생각하기 때문에 변수 이름에주의하십시오 : http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html
업데이트
@ rouven-rieker는 트위터를 통해 추가되었으며 누락 된 mysql4는 magento 1.6에 추가되었습니다. 이전 버전과의 호환성이 필요한 경우주의하십시오!