2

Pylons + mod_wsgi + mod_userdir

ต่อจาก ติดตั้ง Django ก็ต่อด้วย Pylons. ก่อนหน้าจะพยายามลง Pylons ผมก็ลองพวก WSGIDaemonProcess ไปแล้ว แต่ว่าไม่สำเร็จก็เลยข้ามๆ ไป. ใช้ user เป็น www-data ก็ได้ :-P.

Pylons ก็มา pattern เดิมๆ ที่อ่านมาจาก http://code.google.com/p/modwsgi/wiki/IntegrationWithPylons เริ่มด้วยสร้าง pylons.wsgi ใน /home/veer/public_html/wsgi-scripts ตามนี้

APP_CONFIG = "/home/veer/Develop/pylons/mydb4/production.ini"
import os
os.environ['PYTHON_EGG_CACHE'] = "/home/veer/egg"
import sys
sys.path.append("/home/veer/Develop/pylons/mydb4")
from paste.deploy import loadapp
application = loadapp("config:" + APP_CONFIG)

แล้วก็สร้าง /home/veer/egg เปลี่ยน permission ( mkdir /home/veer/egg; chmod 777 /home/veer/egg )

แล้วก็แก้สร้าง production.ini โดยการ copy มาจาก development.ini แล้วก็แก้ให้
full_stack = false
และ
debug = false

เท่านี้ก็น่าจะพอใช้ได้แล้ว

ลืมไปผมสร้าง app ไว้ใน /home/veer/Develop/mydb4 นะครับ พวก development.ini ก็อยู่ในนี้ล่ะ

9

แนวทางในการแก้ให้ ICU ตัดคำภาษาลาวได้

หลังจากที่ได้ word list จาก au8ust มาผมก็ยังไม่ได้ทำอะไรกับ word list เลย. แต่เท่าที่ดูแล้วโปรแกรมที่แก้แล้วน่าจะมีประโยชน์กับหลายๆโปรแกรมน่าจะเป็น icu. อย่างเช่น OpenOffice.org เป็นต้น (แต่ก็ไม่รู้ว่าจริงหรือเปล่า)

หลังจากที่ดูคร่าวๆ แล้วไฟล์แรกที่น่าจะต้องแก้น่าจะเป็น source/common/dictbe.h ที่ในนั้นมี ThaiBreakEngine อยู่ ก็เลยคิดว่าก็คงต้องมี LaoBreakEngine ด้วยเหมือนกัน แก้กฎข้างในเล็กๆ น้อยๆ พวกไม้ยมก ก็คงจะไม่เหมือนกันหรือเปล่า … อันนี้ก็ไปแก้ใน source/common/dictbe.cpp

ตอนนี้แผนต่อไปก็คงต้องลงมือทำดูพร้อมเขียน test อะไรประมาณนั้น

ป.ล. libthai ก็ดูน่าสนใจดี มีใช้หลายโปรแกรมเหมือนกัน แต่ libthai ตัดคำภาษาลาวด้วยก็ดูแปลกๆ หรือเปล่า?

1

Django + userdir + mod_wsgi

แน่นอนเป็นภาคต่อมาจาก Turbogears + userdir + mod_wsgi. Django ก็ใช้ท่าคล้ายๆ Turbogears เปลี่ยน prefix นิดๆ หน่อยก็ใช้ได้แล้ว

หลังจากศึกษาวิธีใช้จาก http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango ผมสร้าง django.wsgi ไว้ใน /home/veer/public_html/wsgi-scrips อีกเช่นเคย

import os, sys
sys.path.append('/home/veer/Develop/django/mysite') # site ของผมเก็บไว้ที่นี้
sys.path.append('/home/veer/Develop/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

ที่ลำบากนิดหน่อยคือพวก media ทั้งหลาย ผมก็ copy มาไว้ใน home เลย (ขนาดประมาณ 300KiB กว่าๆ)

cp -r /usr/share/python-support/python-django/django/contrib/admin/media/ /home/veer/public_html/django_admin_media

แล้วก็ไปแก้ settings.py ใน /home/veer/Develop/django/mysite นิดหน่อย แก้ ADMIN_MEDIA_PREFIX จากเท่ากับ ” เป็น ADMIN_MEDIA_PREFIX = ‘/~veer/django_admin_media/’

เท่านี้ก็ไปเปิดเว็บดูก็ใช้ได้ (ถ้าผมไม่ได้ลืมเขียนอะไรไปนะ)

พรุ่งนี้น่าจะได้ลอง Pylons กับ WSGIDaemonProcess username user=username อะไรทำนองนี้.

2

mod_wsgi + userdir + Turbogears

อาจจะดูคลั่งๆ หน่อยแต่ mod_wsgi + userdir + Turbogears ก็ใช้ได้แล้ว. ด้วยพื้นฐานจากการใช้ mod_wsgi+userdir , การใช้ mod_wsgi กับ Turbogears และ การใช้ mod_wsgi กับ Turbogears แบบ non-root-mount. ก็แทบจะไม่ต้องทำอะไรแล้ว :-P.

แค่ copy ไฟล์ tg.wsgi ที่เคยอยู่ใน /home/veer/tg/tgapp/apache ไปไว้ใน /home/veer/public_html/wsgi-scripts/ แล้วก็แก้ prod.cfg ใน /home/veer/tg/tgapp นิดหน่อยที่ server.webpath ให้เปลี่ยนเป็น server.webpath=”/~veer/wsgi-scripts/tg.wsgi” เท่านี้ก็ใช้ซะงั้น.

สำหรับ Turbogears แล้วสำคัญมาที่ต้องใช้ tg.url เวลาเขียน URL ไม่ใส่ URL เอาเองตรงๆ (แบบที่ผมเคยทำ) … ไม่งั้นเวลามา deploy แบบนี้ก็แก้กันอ้วก :-P.

0

ทำให้ Turbogears + mod_wsgi ใช้งานกับ non-root mounted app

วิธีทำจริงๆ ก็อ่านจาก http://www.lucasmanual.com/mywiki/TurboGears#head-57ee578707aa057229eb1171a8e4aeb553bd6d3a มาเกือบหมด. แต่ว่าเขียนเสียหน่อยเพื่อความต่อเนื่องจากที่เขียนไว้เดิม. เริ่มจากแก้ /home/veer/tg/tgapp/apache/tg.wsgi:

import sys
sys.path.append('/home/veer/tg/tgapp')
sys.stdout = sys.stderr

import os
os.environ['PYTHON_EGG_CACHE'] = '/home/veer/tg/python-eggs'

import atexit
import cherrypy
import cherrypy._cpwsgi
import turbogears

# ข้างล่างเปลี่ยนไปใช้ fullpath แทนที่จะเขียน prod.cfg หรือ dev.cfg เฉยๆ
turbogears.update_config(configfile="/home/veer/tg/tgapp/prod.cfg", modulename="tgapp.config")
turbogears.config.update({'global': {'server.environment': 'production'}})
turbogears.config.update({'global': {'autoreload.on': False}})
turbogears.config.update({'global': {'server.log_to_screen': False}})

import tgapp.controllers

cherrypy.root = tgapp.controllers.Root()

if cherrypy.server.state == 0:
    atexit.register(cherrypy.server.stop)
    cherrypy.server.start(init_only=True, server_class=None)

application = cherrypy._cpwsgi.wsgiApp

จริงๆ แล้วก็แก้บรรทัดเดียว :-P … แต่ตอนลองทำงงเหมือนกัน

แล้วก็ไปสร้าง server.log ใน /home/veer/tg/tgapp/server.log อันนี้มีก็ทำแบบชั่วคราวๆ :-P (อีกแล้ว)

(อยู่ใน /home/veer/tg/tgapp)
touch server.log
chmod 777 server.log

ตามด้วยแก้ /home/veer/tg/tgapp/prod.cfg ทีแรกมันไม่มีให้แก้ก็เลยต้อง copy sample-prod.cfg มา

เพิ่ม server.webpath=”/first” เข้าไป (จริงมี # server.webpath=”” อยู่แล้ว ก็แค่เอา shape ออกแล้วใส่ /first ลงไป) แก้ path ของ server.log แบบนี้ args=”(‘/home/veer/tg/tgapp/server.log’,)” จากที่เดิมเขียนไว้ว่า args=”(‘server.log’,)”

ตามด้วยแก้ /etc/apache2/mod-enabled/mod-wsgi.conf เดิมเขียนไว้ว่า
WSGIScriptAlias / /home/veer/tg/tgapp/apache/tg.wsgi
ก็แก้เป็น
WSGIScriptAlias /first /home/veer/tg/tgapp/apache/tg.wsgi
เพื่อเปลี่ยนที่ mount

แล้วก็ restart apache ( /etc/init.d/apache restart ) จากนั้นพอเข้าไปดูใน localhost/first ก็ได้ผลตามต้องการ

… ต่อไปก็เป็น userdir T_T (เหมือนหา doc ไม่ค่อยเจอด้วย :-P)

4

mod_wsgi + turbogears (แบบง่ายๆ ก่อน)

วิธีลงอ่านมาจาก http://code.google.com/p/modwsgi/wiki/IntegrationWithTurboGears. ที่เขียนนี้ผมยังไม่ได้ลองใช้ userdir เลย คิดว่าน่าจะซับซ้อนขึ้นมาก. จริงๆ แล้วแค่เปลี่ยน url จาก localhost ไปเป็น localhost/tg ก็เจ๊งแล้ว :-P.

เริ่มจากแก้ไฟล์ /etc/apache2/mod_enabled/mod-wsgi.conf:

<IfModule mod_wsgi.c>
    WSGIScriptAlias / /home/veer/tg/tgapp/apache/tg.wsgi

    <Directory /home/veer/tg/tgapp/apache>
        Order deny,allow
        Allow from all
    </Directory>
</IfModule>

เสร็จแล้วก็สร้าง folder ชื่อ /home/vee/tg (mkdir /home/veer/tg) แล้วก็สร้าง python-eggs ใน /home/veer/tg ไว้เป็น cache แล้วผมก็เปลี่ยน permission ของ python-eggs เป็น 777 เลย เพราะว่า user id ของ folder กับ apache ต่างกัน … จริงๆน่าจะมีวิธีแก้ที่ดีกว่านี้ แต่ผมคิดว่าเอาง่ายให้ได้ก่อนดีกว่า

จากนั้นใน /home/veer/tg ก็เรียก tg-admin quickstart tgapp ตอบๆ อะไรไปหน่อยก็จะได้ folder ชื่อ /home/veer/tg/tgapp ขึ้นมา ในนั้นก็สร้าง /home/veer/tg/tgppp/apache/tg.wsgi ขึ้นมา ข้างในก็ลองมาตามตัวอย่างเลย แต่ก็แอบแก้ path กับชื่อ project นิดหน่อย

import sys
sys.path.append('/home/veer/tg/tgapp')
sys.stdout = sys.stderr

import os
os.environ['PYTHON_EGG_CACHE'] = '/home/veer/tg/python-eggs'

import atexit
import cherrypy
import cherrypy._cpwsgi
import turbogears

turbogears.update_config(configfile="dev.cfg", modulename="tgapp.config")
turbogears.config.update({'global': {'server.environment': 'production'}})
turbogears.config.update({'global': {'autoreload.on': False}})
turbogears.config.update({'global': {'server.log_to_screen': False}})

import tgapp.controllers

cherrypy.root = tgapp.controllers.Root()

if cherrypy.server.state == 0:
    atexit.register(cherrypy.server.stop)
    cherrypy.server.start(init_only=True, server_class=None)

application = cherrypy._cpwsgi.wsgiApp

เสร็จแล้วก็ restart apache ( sudo /etc/init.d/apache2 restart ) แล้วก็เปิดเว็บดูที่ localhost ก็ดูได้ตามรูป

แต่ว่าก็ยังเหลืออะไรที่ต้องแก้อีกมากมาย พื้นก็เปลี่ยน url จาก localhost ไปเป็น localhost/tgapp ผมก็ยังทำไม่ได้เลย :-P