5/25/2013

Deploy Django to webserver (apache2, wsgi)

Note ไว้สำหรับตัวเองเพราะต้องเอา Django ไปใช้

วัตถุดิบ

  1. OS ที่ใช้
    • Ubuntu Quantal 64-bit
  2. Web Server
    • apache httpd + mod_wsgi
  3. Database
    • MySQL

วิธีการลง

  1. ลง Ubuntu ก่อน ฮาา
  2. ลง  MySQL Server
    • sudo apt-get install mysql-server # ขั้นตอนนี้ MySQL จะให้เซต password ให้ใส่ตามต้องการ
  3. ลง apache httpd และ mod_wsgi โดยใช้คำสั่ง 
    • sudo apt-get install apache2 libapache2-mod-wsgi
  4. ลง Django webframework และ Python MySQL
    • sudo apt-get install python-django python-mysqldb
  5. นำ django web ที่เราทำใส่ใน /var/www 
  6. เปิดไฟล์ /etc/apache2/sites-available/default ขึ้นมาเพื่อ config wsgi
  7. restart apache config
    sudo service apache2 restart
  8. deploy Model ลง database โดยไปที่ web ของเรา
    สั่ง python manage.py syncdb # ให้ตรวจสอบ config ของ database ก่อนที่จะสั่งด้วย
  9. เปิด browser เข้าเวบของเราก็จะเข้าได้ทันที

5/13/2013

หา url จริงๆ จาก http redirect

จะเอามาลองทำ check status ของ alfresco แบบง่ายด้วยการให้ลอง GET จาก index page ซึ่ง alfresco ทำ redirect page ไว้ทำให้เรา request ไปจะได้ status code เป็น 302 กลับมาก็เลยลองเขียน python ให้มันแก้ปัญหานี้เพื่อหา URL ที่แท้จริงมาซึ่งก็ได้ประมาณนี้

โค้ดดังกล่าวแก้ปัญหาได้ด้วย recursive โดยให้มันตรวจสอบไปเรื่อยๆ ว่า status code ที่ได้เป็น 302 หรือไม่ ถ้าเป็น 200 แล้วก็ให้คืน URL นี้มาได้เลย

5/11/2013

Mock object ที่ถูกสร้างใน method

โจทย์ของผมคือต้องใช้ Popen module subprocess แต่มีปัญหาว่าเราจะ mock ยังไงในเมื่อมันไป new object ใน method ไม่ได้มาจากการ inject ผ่าน constructor หรือ setter แต่อย่างใด ก็เลยเกิดไอเดียจากการนั่งอ่าน stackoverflow ทำให้เห็นภาพเป็นประมาณนี้



จากที่เห็นเราต้องสร้าง class MockPopen เพื่อเอามา mock ก่อนจากนั้นก็จัดการ mock method และ getter ต่อมาก็คือใช้ setattr เพื่อหลอกว่า Popen คือ MockPopen ที่เราสร้างขึ้น เมื่อ class Process เรียกใช้ก็ยังเห็นว่ามันเป็น Popen และที่เราเทสนั้นก็ยังกำหนด return_value และยังสามารถ verify ได้ว่า method ได้ถูก call หรือไม่