Friday, November 18, 2011

Perbaikian Bug #4339 untuk Google AppEngine dan VirtualEnv

Solusi ini saya adaptasi dari tulisan disini dan untuk
  • Google AppEngine versi 1.6.0
  • VirtualEnv minimal versi 1.6.4
Asumsinya:
  • Google AppEngine berada di ~/google_appengine atau path lengkapnya dilaptop saya /home/rahmad/google_appengine
  • Lingkungan yang dibuat berada di ~/ngoprek atau path lengkapnya dilaptop saya /home/rahmad/ngoprek
  • Directory untuk konfigurasi virtualenv berada di ~/ngoprek/env  atau path lengkapnya dilaptop saya /home/rahmad/ngoprek/env
  • Lingkungan ini dibuat dengan perintah
    • virtualenv --python=python2.5 --no-site-packages env
Langkah-langkahnya:
  1. Buat berkas bernama gae.pth (atau terserah apa namanya asakan berakhiran .pth) di dalam directory ~/ngoprek/env/lib/python2.5/site-packages
  2. Berkas tersebut hanya berisi satu baris yaitu path lengkap dari Google AppEngine. Kalau di lingkungan saya akan tertulis:
    • /home/rahmad/google_appengine
    • Perhatikan ini harus path lengkap dan tidak boleh memakai ~ seperti: ~/google_appengine
  3. Buka berkas ngoprek/env/lib/python2.5/site.py
  4. Cari fungsi yang bernama main
  5. Pergi ke akhir fungsi main tersebut dan tambahkan dua baris berikut:
    • from dev_appserver import fix_sys_path
    • fix_sys_path()
  6. Uji apakah perubahan ini berhasil dengan:
    • Mengatifkan virtualenv
      • . env/bin/activate
    • Menjalankan program interpreter python
      • python
    • Dan eksekusi perintah-perintah berikut:
      • import yaml
      • from google import appengine
  7. Jika kedua perintah tersebut berhasil dijalankan tanpa kesalahan,  keluar dari python dan buka berkas: ~/google_appengine/google/appengine/tools/dev_appserver_import_hook.py
  8. Setelah perintah import sys (kira-kira baris ke-35) tambahkan kode berikut:
    • import cgi
  9. Kemudian di dalam berkas yang sama cari definisi untuk class yang bernama FakeFile
  10. Di dalam definisi class ini cari variabel yang bernama ALLOWED_DIRS
  11. Ubah definisi variable ini sehingga menjadi seperti berikut:
    • ALLOWED_DIRS = set([
    • os.path.normcase(os.path.realpath(os.path.dirname(os.__file__))),
    • os.path.normcase(os.path.abspath(os.path.dirname(os.__file__))),
    • os.path.normcase(os.path.dirname(os.path.realpath(os.__file__))),
    • os.path.normcase(os.path.dirname(os.path.abspath(os.__file__))),
    • # required when using virtualenv
    • # cgi is on system python folder /usr/lib/python2.5/cgi.py
    • # os is on virtualenv python folder '/path/to/virtualenv/lib/python2.5'])
    • os.path.normcase(os.path.realpath(os.path.dirname(cgi.__file__))),
    • os.path.normcase(os.path.abspath(os.path.dirname(cgi.__file__))),
    • os.path.normcase(os.path.dirname(os.path.realpath(cgi.__file__))),
    • os.path.normcase(os.path.dirname(os.path.abspath(cgi.__file__))),
    • ])
Ruwetnyalah Bug satu ini! Terus ini link untuk laporan bug ini, lihat-lihat apakah sudah diperbaiki! :p

No comments:

Post a Comment