서두 스크립팅? 아니면 배치 API?


8

Ubercart 웹 사이트에는 매일 대량의 주문을 처리하고 처리하며 청구, 배송 라우팅 및 향후 주문 생성과 같은 다른 작업을 실행합니다.

이러한 작업 중 일부는 무겁고 때로는 PHP 시간 초과를 유발합니다. Drush 또는 Batch API를 통해 이러한 작업을 실행하는 더 좋은 방법이 있습니까?

속도는 반드시 우선 순위는 아니지만 (멋진 경우도 있지만) 시간이 초과되는 것을 피하려고합니다. 시간 초과로 인해 올바른 청구 및 일일 주문 예약에 문제가 발생할 수 있습니다.

Drush 스크립트가 더 나은 옵션입니까, 아니면 Batch API입니까? 두 가지를 더 잘 활용하기위한 튜토리얼이 있습니까?

답변:


13

배치 작업이 브라우저에 의존한다는 사실 때문에 배치 API를 사용하지 않는 것이 좋습니다. 어떤 이유로 든 브라우저가 충돌하거나 서버와의 연결이 끊어지면 배치 작업이 종료되지 않거나 중단됩니다. 실제로, PHP 타임 아웃을 피하기 위해 배치 작업으로 인해 브라우저가 배치 페이지를 간격으로 핑 (ping)합니다. 이것은 JavaScript 코드가 관련되거나 그렇지 않을 때마다 발생합니다 (나중에 Drupal은 refresh meta 태그를 사용합니다).

이 경우 Drush가 더 나은 선택 일 것입니다. 특정 Drush 명령을 구현하는 사용자 지정 모듈을 만들거나 Drush가 해당 명령에 사용하는 디렉토리에 명령 파일을 추가하기 만하면됩니다.


2
서두르는 것 외에도 대기열을 사용하여 여러 항목을 동시에 실행할 수 있습니다.
Daniel Wehner

2

또한 사용자 정의 PHP CLI 스크립트를 사용할 수 있습니다. 다음은 drupal 7의 간단한 예입니다.

#!/usr/bin/php
<?php
echo "Ubercart tasks\n===================\n";

$_SERVER['HTTP_HOST']       = 'default';
$_SERVER['PHP_SELF']        = '/index.php';
$_SERVER['REMOTE_ADDR']     = '127.0.0.1';
$_SERVER['SERVER_SOFTWARE'] = NULL;
$_SERVER['REQUEST_METHOD']  = 'GET';
$_SERVER['QUERY_STRING']    = '';
$_SERVER['PHP_SELF']        = $_SERVER['REQUEST_URI'] = '/';
$_SERVER['HTTP_USER_AGENT'] = 'console';

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//-------------------------------------------

// Place your code here

4
여기서 문제는 휠을 재발 명한다는 것입니다. Drush는 이미 이런 종류의 작업을 수행하고 프레임 워크가 이미 마련되어 있기 때문에 더 나은 선택입니다!
크리스 코헨

1
나는 무언가를하고 싶은 모든 서버에 drush를 설치하고 싶지 않습니다.
ya.teck

2
이유가 있습니까? 다른 모듈을 설치하는 것만 큼 집중적입니다.

나는 여러 번하고 있었고이 방법이 조금 더 쉽다고 생각합니다.
ya.teck

1

'자동 생성 디지털 제품'에 대한 상당한 백엔드 처리가 필요한 D6 Ubercart 사이트가 있습니다. 나는 이것을 통해 이것을 처리한다 :

  1. 이러한 맞춤형 디지털 제품 중 하나를 구매하면 '컴파일해야하는 제품'에 대한 db 테이블 항목이 생성됩니다. 해당 db 항목은 '상태'필드입니다.
  2. BASH 스크립트는 백그라운드에서 실행되는 Drupal 내에서 시작됩니다. 이 스크립트는 '재진입'되어 실행 중에 호출되는 것을 인식하고 아직 완료되지 않은 기존 작업에 새 작업을 추가합니다.
  3. 이 BASH 스크립트는 맞춤형 디지털 제품이 생성 될 때 Drupal 데이터베이스의 '상태'필드를 증가시키고 최종적으로 완성 된 맞춤형 제품에 대한 다운로드 링크가 포함 된 이메일 알림을 사용자에게 보냅니다.

이것은 PHP CLI 스크립트를 사용하지 않지만 Drupal의 PHP가 백그라운드에서 실행하기 위해 BASH 스크립트를 호출한다는 점을 제외하고는 Xio가 제안한 것과 다소 유사한 솔루션입니다. 이러한 BASH 스크립트는 Drupal 데이터베이스에 액세스하여 컴파일하고 고객에게 보내는 모든 제품의 '상태'값을 향상시킵니다. 또한 Drupal은 이러한 상태 값을 확인하고 '맞춤 제작 프로세스'에서 구매가 현재 진행중인 고객에게보고 할 수 있습니다.

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