Script Drush? Atau Batch API?

8

Kami memiliki situs web Ubercart yang menangani volume pesanan dalam jumlah besar setiap hari, memprosesnya dan menjalankan tugas-tugas lain seperti penagihan, pengiriman rute, dan pembuatan pesanan di masa mendatang.

Beberapa dari tugas-tugas ini berat dan terkadang menyebabkan PHP kehabisan waktu. Apakah ada cara yang lebih baik untuk menjalankan tugas-tugas ini seperti melalui Drush atau Batch API?

Kecepatan tidak harus menjadi prioritas (walaupun bagus), tetapi kami ingin menghindari batas waktu, yang terkadang dapat menyebabkan masalah dengan penagihan dengan benar dan menjadwalkan pesanan harian.

Apakah skrip Drush pilihan yang lebih baik, atau API Batch? Apakah ada tutorial untuk memanfaatkan keduanya dengan lebih baik?

Kevin
sumber

Jawaban:

13

Saya tidak akan menyarankan untuk menggunakan API batch, hanya karena fakta bahwa operasi batch tergantung dari browser; jika karena alasan apa pun browser mogok, atau kehilangan koneksi dengan server, operasi batch tidak akan berakhir, atau (lebih buruk) mereka akan menggantung. Bahkan, untuk menghindari PHP timeout, operasi batch menyebabkan browser melakukan ping halaman batch secara berkala; itulah yang terjadi, setiap kali kode JavaScript terlibat, atau tidak (dalam kasus selanjutnya, Drupal menggunakan tag meta penyegaran).

Dalam kasus ini, Drush mungkin merupakan pilihan yang lebih baik; Anda dapat membuat modul khusus yang mengimplementasikan perintah Drush tertentu, atau cukup menambahkan file perintah di direktori yang digunakan Drush untuk perintahnya.

kiamlaluno
sumber
2
Tambahan untuk drush, Anda sebenarnya bisa juga menggunakan antrian untuk menjalankan banyak item sekaligus.
Daniel Wehner
2

Anda juga dapat menggunakan skrip PHP CLI khusus. Berikut adalah contoh sederhana untuk 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
ya.teck
sumber
4
Masalahnya di sini adalah Anda sedang menciptakan kembali roda. Drush adalah pilihan yang lebih baik karena sudah akan melakukan hal semacam ini dan kerangka sudah ada!
Chris Cohen
1
Saya tidak suka memasang drush di semua server tempat saya ingin melakukan sesuatu.
ya.teck
2
Apakah ada alasannya? ini tentang sama intensifnya dengan menginstal modul lain.
Saya melakukannya berkali-kali dan saya pikir metode ini sedikit lebih mudah.
ya.teck
1

Saya memiliki situs D6 Ubercart yang membutuhkan pemrosesan back-end yang signifikan untuk 'produk digital yang dibuat secara otomatis'. Saya menangani ini melalui:

  1. Pembelian salah satu produk digital khusus ini menyebabkan entri tabel db untuk 'produk yang perlu dikompilasi.' Dalam entri db adalah bidang 'status'.
  2. Skrip BASH dimulai dari dalam Drupal yang berjalan di latar belakang. Skrip ini 'masuk kembali', artinya ia sadar dipanggil saat menjalankan dan menambahkan karya baru ke pekerjaan yang sudah ada yang belum selesai.
  3. Skrip BASH ini menambah bidang 'status' dalam basis data Drupal ketika produk digital kustom dibuat, dan akhirnya pemberitahuan email dikirim kepada pengguna dengan tautan unduhan untuk produk kustom lengkap mereka.

Ini adalah solusi yang agak mirip dengan yang diusulkan oleh Xio, dengan pengecualian bahwa ini tidak menggunakan skrip PHP CLI, tetapi skrip BASH yang dipanggil oleh PHP di Drupal untuk dijalankan di latar belakang. Skrip BASH tersebut mengakses basis data Drupal dan memajukan nilai 'status' dari setiap produk yang dikompilasi dan dikirim ke pelanggan. Selain itu, Drupal dapat melihat nilai status ini dan melaporkan kembali ke pelanggan di mana dalam 'proses pembuatan kustom' pembelian mereka terjadi saat ini.

Blake Senftner
sumber