سؤال

لدي تطبيق Python Web صغير باستخدام إطار Cherrypy. أنا بأي حال من الأحوال خبير في خوادم الويب.

حصلت على Cherrypy العمل مع Apache باستخدام MOD_PYTHON على خادم Ubuntu الخاص بنا. ومع ذلك، لا بد لي من استخدام Windows 2003 و IIS 6.0 لاستضافة موقعي.

يعمل الموقع بشكل مثالي كخادم مستقل - أنا ضائع للغاية عندما يتعلق الأمر بالتشغيل في IIS. لقد أمضيت في اليوم الماضي googling ويحاول عمياء أي وكل شيء للحصول على هذا الجري.

لدي جميع الأدوات المختلفة المثبتة أن مواقع الويب أخبرتني أن (بيثون 2.6، Cherpyy 3، ISAPI-WSGI، PYWIN32) وقد قرأت كل الوثائق التي يمكنني. هذه المدونة كانت مفيدة:

http://whatschrisdoing.com/blog/2008/07/10/turbogears-isapi-wsgi-iis/

لكنني ما زلت ضائع بما أحتاج لتشغيل موقعي. لا يمكنني العثور على أي أمثلة شاملة أو كيف تبدأ حتى. آمل أن شخصا ما هنا يمكنه المساعده!

هتافات.

هل كانت مفيدة؟

المحلول 2

حسنا، حصلت عليه يعمل. بفضل جايسون وكل مساعدته. كنت بحاجة للاتصال

cherrypy.config.update({
  'tools.sessions.on': True
})
return cherrypy.tree.mount(Root(), '/', config=path_to_config)

كان لدي هذا في ملف التكوين تحت [/] ولكن لسبب ما لم يعجبه ذلك. الآن يمكنني الحصول على تطبيق الويب الخاص بي وتشغيله - ثم أعتقد أنني سأحاول العمل لماذا تحتاج إلى تحديث التكوين ولا يعجبك ملف التكوين لدي ...

نصائح أخرى

أركض شيرليب خلف مواقعي IIS. هناك العديد من الحيل للحصول عليها للعمل.

  1. عند تشغيل هوية عملية عامل IIS، لن يكون لديك نفس الأذونات كما تفعل عند تشغيل الموقع من عملية المستخدم الخاصة بك. الأشياء سوف تنكسر. على وجه الخصوص، ربما لا يعمل أي شيء يريد الكتابة إلى نظام الملفات بدون بعض التغيير والتبديل.
  2. إذا كنت تستخدم Setuptools، فربما تريد تثبيت مكوناتك بخيار -Z (Unzips All All Eggs).
  3. استخدم Win32Traceutil لتتبع المشاكل. تأكد من أنه في البرنامج النصي هوك الذي تقوم باستيراد Win32Traceutil. بعد ذلك، عندما تحاول الوصول إلى موقع الويب، إذا حدث خطأ في أي شيء، فتأكد من أنه يتم طباعته إلى قياسي، فسيتم تسجيل الدخول إلى الأداة المساعدة Trace. استخدم "Python -m Win32Traceutil" لرؤية الإخراج من التتبع.

من المهم فهم العملية الأساسية للحصول على تطبيق ISAPI قيد التشغيل. أقترح أولا الحصول على تطبيق Worlo-World WSGI يعمل تحت ISAPI_WSGI. إليك نسخة مبكرة من برنامج نصي هوك اعتدت التحقق من صحة أنني كنت أحصل على Cherrypy للعمل مع خادم الويب الخاص بي.

#!python

"""
Things to remember:
easy_install munges permissions on zip eggs.
anything that's installed in a user folder (i.e. setup develop) will probably not work.
There may still exist an issue with static files.
"""


import sys
import os
import isapi_wsgi

# change this to '/myapp' to have the site installed to only a virtual
#  directory of the site.
site_root = '/'

if hasattr(sys, "isapidllhandle"):
    import win32traceutil

appdir = os.path.dirname(__file__)
egg_cache = os.path.join(appdir, 'egg-tmp')
if not os.path.exists(egg_cache):
    os.makedirs(egg_cache)
os.environ['PYTHON_EGG_CACHE'] = egg_cache
os.chdir(appdir)

import cherrypy
import traceback

class Root(object):
    @cherrypy.expose
    def index(self):
        return 'Hai Werld'

def setup_application():
    print "starting cherrypy application server"
    #app_root = os.path.dirname(__file__)
    #sys.path.append(app_root)
    app = cherrypy.tree.mount(Root(), site_root)
    print "successfully set up the application"
    return app

def __ExtensionFactory__():
    "The entry point for when the ISAPIDLL is triggered"
    try:
        # import the wsgi app creator
        app = setup_application()
        return isapi_wsgi.ISAPISimpleHandler(app)
    except:
        import traceback
        traceback.print_exc()
        f = open(os.path.join(appdir, 'critical error.txt'), 'w')
        traceback.print_exc(file=f)
        f.close()

def install_virtual_dir():
    import isapi.install
    params = isapi.install.ISAPIParameters()
    # Setup the virtual directories - this is a list of directories our
    # extension uses - in this case only 1.
    # Each extension has a "script map" - this is the mapping of ISAPI
    # extensions.
    sm = [
        isapi.install.ScriptMapParams(Extension="*", Flags=0)
    ]
    vd = isapi.install.VirtualDirParameters(
        Server="CherryPy Web Server",
        Name=site_root,
        Description = "CherryPy Application",
        ScriptMaps = sm,
        ScriptMapUpdate = "end",
        )
    params.VirtualDirs = [vd]
    isapi.install.HandleCommandLine(params)

if __name__=='__main__':
    # If run from the command-line, install ourselves.
    install_virtual_dir()

هذا البرنامج النصي يفعل العديد من الأشياء. يعمل (أ) بمثابة المثبت، تثبيت نفسه في IIS [Install_Virtual_dir]، (B) يحتوي على نقطة الإدخال عندما يقوم IIS بتحميل DLL [__extencoleChactory__]، و (ج) إنه يخلق مثيل Cherrypy WSGI الذي يستهلكه معالج ISAPI [Setup_Application ].

إذا قمت بوضع هذا في دليل InetPub Cherrypy الخاص بك وتشغيله، فسيحاول تثبيت نفسها على جذر موقع الويب الخاص بك اسم IIS المسمى "خادم الويب Cherrypy Web".

أنت أيضا مرحبا بكم في إلقاء نظرة على بلدي إنتاج رمز موقع الويب, التي أعادت كل هذا في وحدات مختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top