2011-11-07 12 views
5

मैं थिंसेफ मोड में नए पायथन 2.7 रनटाइम और जीएई 1.6.0 प्री-रिलीज एसडीके का उपयोग करके जिन्जा 2 के साथ पिरामिड चलाने की कोशिश कर रहा हूं। मैंने here की रूपरेखा के रूप में मेरे ऐप में संशोधन किए हैं, यानी मैंने runtime: python27, threadsafe: trueapp.yaml में सेट किया है और main() फ़ंक्शन से छुटकारा पा लिया है। जब मैं अपने आप को द्वारा प्रतिक्रिया उत्पन्न यह ठीक काम करता है, लेकिन जब मैं समीकरण में jinja2 लाने के लिए प्रयास करते हैं, मैं निम्नलिखित अपवाद:पिरामिड + जिन्जा 2 और नया जीएई रनटाइम

ERROR 2011-11-07 00:10:34,356 wsgi.py:170] 
Traceback (most recent call last): 
    File "/gae/google/appengine/runtime/wsgi.py", line 168, in Handle 
    [...] 
    File "/myapp/source/myapp-tip/main.py", line 29, in <module> 
    config.include('pyramid_jinja2') 
    File "/myapp/source/myapp-tip/lib/dist/pyramid/config/__init__.py", line 616, in include 
    c(configurator) 
    File "lib/dist/pyramid_jinja2/__init__.py", line 390, in includeme 
    _get_or_build_default_environment(config.registry) 
    File "/lib/dist/pyramid_jinja2/__init__.py", line 217, in _get_or_build_default_environment 
    _setup_environment(registry) 
    File "/lib/dist/pyramid_jinja2/__init__.py", line 253, in _setup_environment 
    package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config')) 
    File "/lib/dist/pyramid_jinja2/__init__.py", line 136, in caller_package 
    for t in self.inspect.stack(): 
    File "/usr/lib/python2.7/inspect.py", line 1056, in stack 
    return getouterframes(sys._getframe(1), context) 
    File "/usr/lib/python2.7/inspect.py", line 1034, in getouterframes 
    framelist.append((frame,) + getframeinfo(frame, context)) 
    File "/usr/lib/python2.7/inspect.py", line 1009, in getframeinfo 
    lines, lnum = findsource(frame) 
    File "/usr/lib/python2.7/inspect.py", line 534, in findsource 
    module = getmodule(object, file) 
    File "/usr/lib/python2.7/inspect.py", line 506, in getmodule 
    main = sys.modules['__main__'] 
KeyError: '__main__' 

मैं इस समस्या के समाधान के लिए pyramid_jinja2 कोड के साथ एक सा चारों ओर गंदगी की कोशिश की, केवल एक और अपवाद के साथ छोड़ा जा सकता:

ERROR 2011-11-04 12:06:38,720 wsgi.py:170] 
Traceback (most recent call last): 
    File "/gae/google/appengine/runtime/wsgi.py", line 168, in Handle 
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
    [...] 
    File "/myapp/source/myapp-tip/main.py", line 29, in <module> 
    config.add_jinja2_search_path("templates") 
    File "/myapp/source/myapp-tip/lib/dist/pyramid/config/util.py", line 28, in wrapper 
    result = wrapped(self, *arg, **kw) 
    File "/lib/dist/pyramid_jinja2/__init__.py", line 311, in add_jinja2_search_path 
    env.loader.searchpath.append(abspath_from_resource_spec(d)) 
    File "/myapp/source/myapp-tip/lib/dist/pyramid/asset.py", line 38, in abspath_from_asset_spec 
    return pkg_resources.resource_filename(pname, filename) 
    File "/myapp/source/myapp-tip/pkg_resources.py", line 840, in resource_filename 
    return get_provider(package_or_requirement).get_resource_filename(
    File "/myapp/source/myapp-tip/pkg_resources.py", line 160, in get_provider 
    __import__(moduleOrReq) 
    File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 640, in Decorate 
    return func(self, *args, **kwargs) 
    File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 1756, in load_module 
    return self.FindAndLoadModule(submodule, fullname, search_path) 
    File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 640, in Decorate 
    return func(self, *args, **kwargs) 
    File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 1628, in FindAndLoadModule 
    description) 
    File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 640, in Decorate 
    return func(self, *args, **kwargs) 
    File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 1571, in LoadModuleRestricted 
    description) 
ImportError: Cannot re-init internal module __main__ 

मैं अगर किसी को क्या पिरामिड हुड के नीचे करने के लिए कोशिश कर रहा है पर कुछ प्रकाश डाला सकता है खुशी होगी। बाद के स्टैक ट्रेस के आधार पर ऐसा लगता है कि यह एक संपत्ति को हल करने की कोशिश कर रहा है, लेकिन यह __main__ को फिर से लोड करने का प्रयास क्यों कर रहा है? मुझे यह भी यकीन नहीं है कि मेरी समस्या पिरामिड या जीएई के कारण होती है।

इस मुद्दे पर किसी भी अंतर्दृष्टि के लिए धन्यवाद।

उत्तर

2

मैं पिरामिड से परिचित नहीं हूँ, लेकिन समस्या वास्तव में इस लाइन के साथ होने लगते है:

config.include('pyramid_jinja2') 

जो कुछ भी config बात है, यह कुछ गतिशील आयात जादू कर जा रहा है।

ऐसा मत करो।

ऐप इंजन पर्यावरण सामान्य पायथन में आपके द्वारा आयात किए जाने वाले तरीके को संभाल नहीं करता है। डीबगर के साथ उस लाइन के माध्यम से कदम उठाएं और आप आयात प्रणाली के प्रतिस्थापन संस्करण में घुमाएंगे, जिसे आप जल्द ही देखेंगे, केवल वास्तविक पायथन के एक छोटे से हिस्से को लागू करता है।

यदि संभव हो, तो सामान्य आयात विवरण का उपयोग करें ... अन्यथा, आपको config.include में खोदना होगा और इसे GAE पर प्रतिबंधित आयात सुविधाओं के साथ अच्छा खेलना होगा।

+1

प्रतिस्थापन आयात प्रणाली dev_appserver के लिए विशिष्ट है से पहले उत्पादन वातावरण के प्रतिबंध की नकल करने के लिए जोड़ init__.py,। –

+0

यदि यह सत्य है, तो आप "pyramid_jinja2 आयात करें; config.include (pyramid_jinja2)" (मॉड्यूल नाम के लिए स्ट्रिंग पास करने के बजाय, मॉड्यूल को पास करने के बजाय; यह समतुल्य है) –

+1

दुर्भाग्यवश इससे मदद नहीं मिली। बिल्कुल वही व्यवहार प्राप्त करना। – Docent

2

मैं इसे पिरामिड 1.3 के AssetResolver का उपयोग करके काम करने में कामयाब रहा। पहला प्रयास here है। बस इस मामले में रिज़ॉल्यूवर का जीवनकाल/दायरा क्या नहीं होना चाहिए, मैं इसे बाद में समझूंगा।

0

pyramid_jinja2 में/__ निम्नलिखित कोड _get_or_build_default_environment()

class VirtualModule(object): 
    def __init__(self,name): 
     import sys 
     sys.modules[name]=self 
    def __getattr__(self,name): 
     return globals()[name] 
VirtualModule("__main__") 

def _get_or_build_default_environment(registry): 

(http://www.inductiveautomation.com/forum/viewtopic.php?f=70&p=36917)

+0

यह भी समस्या देखें: https://github.com/Pylons/pyramid_jinja2/issues/63 – cat

संबंधित मुद्दे