Clicky

Using Drush on Windows with Cygwin | suksit dot com

Using Drush on Windows with Cygwin

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 แล้วลองเรียก

$ drush status

ถ้าทุกอย่างปกติ ควรจะมีข้อความขึ้นมาประมาณนี้

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 เพิ่ม เช่น

$ drush dl --help

2 comments

ArtKung©'s picture
ArtKung© (visitor) says:

กลับมาถึง กทม กี่โมงละเนี่ยปวดกะบาลโคตรไม่สบายหนักเลยอะเซ็งจริงๆ

seo's picture
seo (visitor) says:

ขอบคุณมากครับ ต้องรีบหามาลองใช้แล้วครับ

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.