모듈에 설정 스크립트를 사용하는 방법은 무엇입니까?


22

다음 <global>과 같이 공간 내에서 모듈의 etc / config.xml 파일에 자신의 모듈에 대해 설치 스크립트를 선언하여 사용할 수 있습니다 .

<resources>
    <catalog_setup>
        <setup>
            <module>Mage_Catalog</module>
            <class>Mage_Catalog_Model_Resource_Setup</class>
        </setup>
    </catalog_setup>
</resources>

그런 다음 일부 모듈은 파일을 사용하는 mysql4-install-0.0.1.php반면 다른 모듈은 파일을 사용합니다 install-0.0.1.php. 파일 이름 앞에 mysql4를 언제 사용하고 언제 사용하지 않습니까?

또한 설정 스크립트가 실행 중이 아닌 이유를 찾기 위해 어떻게해야합니까?


1
core_resource 테이블에서 항목을 삭제하여 설정을 다시 실행하십시오.
Rick Kuipers

다른 답변뿐만 아니라 그것을 읽을 interesing 수 magentocommerce.com/images/uploads/RDBMS_Guide2.pdf 나는 그것이 좋은뿐만 아니라 알고 무슨 항상 생각 1.6으로 변경 한 뒤에 생각을 그것은 코어 팀에서입니다 및 설명 왜 바뀌 었는지.
Celldweller

답변:


21

Magento 1.6부터는 다중 RDBMS 지원이 추가되어 더 이상 mysql4를 사용할 필요가 없습니다.

왜 실행되지 않는지 알아 보려면 exception.log 또는 system.log를 확인하십시오. 아마도 Magento가 설치 클래스를 찾지 못할 수도 있습니다. 설치 스크립트 작성은 매우 간단합니다.

Alan Storm의 가이드도 확인하십시오 : http://alanstorm.com/magento_setup_resources


11

@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을 살펴보면 두 가지 조사 대상을 찾을 수 있습니다.

  1. 파일 이름을 지정할 수 있습니다 (% s-) % s-VERSION. (php | sql)
  2. 두 개의 설치 스크립트가있는 경우 (데이터 스크립트와 동일하지만 (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 가로 드되고 디버깅 할 시간입니다. 두 가지 표준 오류는 다음과 같습니다.

  1. 구성에 스크립트를 추가하는 것을 잊었습니다.
  2. 나는의 디렉토리가 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에 추가되었습니다. 이전 버전과의 호환성이 필요한 경우주의하십시오!


3

스크립트가 실행되고 있지 않으면 모듈 버전이 설정 스크립트 버전과 일치하는지 확인해야합니다.

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 

1

스크립트가 실행되고 있지 않으면 core_resource에서 버전 번호를 재설정하고 캐시를 플러시하십시오. Magento는 모든 캐시가 활성화되면 미리 설정 스크립트를 실행하는 것처럼 보이고 버전을 미리 캐시합니다. 우리는 모두 캐시가 비활성화 된 상태에서 작업하기 때문에이를 알지 못할 수도 있지만 캐시가 활성화 된 경우 업로드를 통해 라이브 사이트에 설치하는 것은 작동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.