What is Drush?
หนึ่งในเครื่องมือที่ขาดไม่ได้เวลาทำงานกับ Drupal ก็คือ Drush ที่ทำให้ทำงานหลายๆ อย่างได้ด้วยการใช้ command line หลักๆ ก็เช่น ดาวน์โหลดและติดตั้งโมดูล/ธีม, เคลียร์ cache, รัน update.php, รัน cron, ดูค่าในตาราง variables ฯลฯ
Why Drush?
ความสามารถของ Drush ที่ใช้บ่อยที่สุดก็น่าจะเป็นตอนติดตั้งโมดูล/ธีม นี่แหละ รันคำสั่งบรรทัดเดียว มันจะดาวน์โหลดแพ็กเกจและแตกไฟล์ให้เสร็จเรียบร้อย สมมติเราต้องการติดตั้งโมดูลซัก 5-6 ตัว ขั้นตอนปกติที่จะต้องทำก็คือ
- ไปที่ drupal.org
- ค้นหาโมดูลที่ต้องการ (ถ้าจะให้เร็วกว่านั้น แนะนำให้ค้นหาโมดูลด้วย Firefox quick search)
- ดาวน์โหลดแพ็กเกจติดตั้งของแต่ละโมดูล
- แตกแพ็กเกจไปไว้ในไดเร็กทอรี
sites/all/modules
- ไปที่
http://example.com/admin/build/modules
- คลิกเลือกโมดูลที่ต้องการเปิดใช้งาน
- กดปุ่ม Save configuration
ในขณะที่ Drush สามารถทำได้โดยพิมพ์คำสั่งแค่ 3 บรรทัด
$ cd /cygdrive/d/www/my_drupal_site
$ drush dl admin admin_menu devel markdown cck views
$ drush en admin admin_menu devel markdown cck views
โฆษณาเสร็จแล้ว มาเข้าเรื่องตามหัวข้อบล็อกกันดีกว่า
Why Cygwin?
สิ่งที่น่าเศร้าใจสำหรับผู้ใช้วินโดวส์ก็คือ พวกเครื่องมือแบบ command line ส่วนใหญ่ จะออกแบบมาเพื่อให้ใช้กับระบบปฏิบัติการตระกูล *nix (ลินุกซ์, Mac, ฯลฯ) เป็นหลัก แต่สาวกไมโครซอฟต์ก็ยังมีไม้ตายคือ Cygwin ที่ช่วยให้สามารถใช้ environment แบบ *nix บนวินโดวส์ได้ สำหรับผมที่ลง Cygwin เป็นโปรแกรมมาตรฐานในเครื่องอยู่แล้ว (เอาไว้โหลด manga :P) การใช้ Drush บน Cygwin ก็ดูจะเป็นทางเลือกที่สมเหตุสมผลที่สุด
จริงๆ Drush มีเวอร์ชันที่ทำงานบน Command Prompt ของวินโดวส์ด้วย (ดููในแพ็กเกจจะมีไฟล์ drush.bat) แต่ไม่เคยลองใช้เหมือนกัน ไม่แน่ใจว่าต้องเซ็ตอะไรยุ่งยากหรือเปล่า ถ้าใครเคยลองช่วยเพิ่มเติมข้อมูลด้วยก็ดีครับ
Installing PHP on Cygwin
ก่อนอื่นก็ต้องติดตั้ง Cygwin แบบมีแพ็กเกจจาก Cygwin Ports โดยแพ็กเกจที่จำเป็นต้องลงคือ
- Utils/ncurses (สำหรับคำสั่ง tput)
- Shell/mintty (เชลล์สำหรับ Cygwin ที่ดีกว่า Command Prompt)
- PHP/php (PHP core)
- PHP/php-mbstring (mbstring extension)
- PHP/php-mysqli (mysqli extension)
- PHP/php-session (session extension)
- PHP/php-json (json extension)
สำหรับแพ็กเกจ PHP จะอยู่ใน Cygwin Ports ถ้าติดตั้ง Cygwin แบบปกติจะไม่มีให้เลือก นอกจากนี้อาจเลือกลงแพ็กเกจเพิ่มเติมตามความต้องการใช้งาน เช่น vim, openssh, git, subversion, inetutils, wget ฯลฯ เรียกได้ว่าเปิดหน้าต่าง mintty ขึ้นมาก็มีลินุกซ์ไว้ใช้งานแล้ว
Installing Drush
การติดตั้ง Drush ทำได้ง่ายๆ โดยดาวน์โหลดแพ็กเกจจากหน้าโปรเจกต์ของ Drush แล้วแตกไฟล์ไว้ที่ไหนก็ได้ ไม่จำเป็นต้องอยู่ในไดเร็กทอรีเดียวกับ Drupal (และจริงๆ มันก็ไม่ควรอยู่) แนะนำให้โหลดตัว official release เพราะตัว development version มีการเรียกฟังก์ชันที่มีเฉพาะใน Drupal 7 ด้วย
ด้วยพลังของ Cygwin (จริงๆ คือพลังของ tools บน *nix :P) เราสามารถติดตั้ง Drush ด้วยคำสั่งเพียงบรรทัดเดียว โดยไปที่ไดเร็กทอรีที่จะติดตั้ง Drush แล้วพิมพ์คำสั่ง (สมมติว่าต้องการติดตั้งในไดรว์ D:)
$ cd /cygdrive/d
$ wget -q -O - http://ftp.drupal.org/files/projects/drush-All-Versions-2.1.tar.gz | tar xzf -
รอสักครู่ จะได้ไดเร็กทอรี drush พร้อมใช้งานในทันที จากนั้นเพื่อความสะดวกก็สร้างลิงก์ไปหาไฟล์ drush ไว้ใน PATH ของ Cygwin (เพื่อให้เรียกใช้งานได้จากทุกไดเร็กทอรี) เช่น
$ ln -s /cygdrive/d/drush/drush /usr/local/bin/drush
Modifying Drush
ถ้าใช้วิธีแบบของผม จะต้องแก้ไขไฟล์ของ Drush เล็กน้อย เพราะโค้ดของ Drush บางส่วนเขียนขึ้นเพื่อให้ทำงานกับ PHP บนวินโดวส์ได้ และจะแปลง path เป็น drive:\path\to\file แทนที่จะเป็น /path/to/file ตามระบบไฟล์ของ *nix แต่ตอนนี้เราใช้ PHP บน Cygwin จึงไม่จำเป็นต้องแปลง path กลับไปกลับมาอีก ไฟล์ที่ต้องแก้มี 2 ไฟล์คือ
drush/drush: (คอมเมนต์บรรทัดที่ตรวจสอบว่าเป็น Cygwin ออก)
# Build the path to drush.php.
SCRIPT_PATH=$(dirname $SELF_PATH)/drush.php
# [[ $(uname -a) == CYGWIN* ]] && SCRIPT_PATH=$(cygpath -w -a -- "$SCRIPT_PATH")
drush/includes/environment.inc: เอาบรรทัดที่ตรวจสอบว่าเป็น Cygwin ออกเช่นกัน
function _drush_convert_path($path) {
$path = str_replace('\\','/', $path);
// $path = preg_replace('/^\/cygdrive\/([A-Za-z])(.*)$/', '\1:\2', $path);
return $path;
}
Installing Drupal
ทำการติดตั้ง Drupal ตามปกติ หรือถ้าติดตั้งไว้แล้วก็ข้ามไปได้เลย ตรงนี้คิดว่าน่าจะทำเป็นกันอยู่แล้ว ถ้ายังไม่เคย แนะนำให้ลองอ่าน การติดตั้ง Drupal ภายใน 1 นาที! ครับ ถึงตรงนี้ถ้าคันไม้คันมืออยากลองใช้ Drush ก็เริ่มได้เลย โดยไปที่ไดเร็กทอรีที่จะติดตั้ง Drupal แล้วพิมพ์คำสั่ง (สมมติต้องการติดตั้งไว้ใน D:\www)
$ cd /cygdrive/d/www
$ drush dl drupal
รอสักพัก ก็จะได้ไดเร็กทอรี drupal-6.14 (หรือเวอร์ชันล่าสุด) มาเพื่อทำการติดตั้งต่อไป
Editing settings.php
เป็นกรรมอีกอย่างของคนใช้วินโดวส์ ที่ MySQL บนวินโดวส์นั้นไม่ค่อยจะลงรอยกับ Cygwin สักเท่าไร โดยเวลารัน Drush บางครั้งมันจะฟ้องว่าหาไฟล์ mysql.sock ไม่เจอ แต่วิธีแก้ไม่ยาก แค่เปิดไฟล์ settings.php ของ Drupal แล้วเปลี่ยน localhost ใน $db_url เป็น 127.0.0.1 แทน ตามนี้
$db_url = 'mysql://username:password@127.0.0.1/databasename';
Let’s Drush!
ถ้าติดตั้ง Drupal เสร็จเรียบร้อยก็ถึงเวลาใช้งาน Drush อย่างเต็มรูปแบบ ก่อนเริ่มใช้งานให้ไปที่ไดเร็กทอรีที่ติดตั้ง Drupal แล้วลองเรียก
ถ้าทุกอย่างปกติ ควรจะมีข้อความขึ้นมาประมาณนี้
PHP configuration :
Drupal Root : /cygdrive/d/www/drupal-6.14
Drupal version : 6.14
Site Path : sites/default
Site URI : http://default
Database Driver : mysqli
Database Hostname : 127.0.0.1
Database Username : username
Database Name : databasename
Database Password : password
Database : Connected
Drupal Bootstrap : Successful
Drupal User : Anonymous
สำหรับวิธีการใช้งาน แนะนำให้อ่าน documentation หรือพิมพ์คำสั่ง drush เฉยๆ มันจะแสดงรายการคำสั่งทั้งหมดออกมา ถ้าต้องการดูรายละเอียดของแต่ละคำสั่ง ก็พิมพ์ --help เพิ่ม เช่น
