2013-02-05 26 views
9

Tôi không thể thực hiện công việc ghi nhớ với GAE. Khi tôi sử dụng chương trình phụ trợ bộ nhớ cache của Google, hãy làm theo hướng dẫn trên GAE website, các chế độ xem không được lưu trong bộ nhớ cache. Vì vậy, tôi đã sử dụng bộ nhớ đệm các url như đề xuất trong Django hướng dẫn (ví dụ:Làm thế nào để sử dụng bộ nhớ đệm với Django? (Tốt nhất là trong GAE)

`(r'^example$', cache_page(60*15)(views.example)), 

sau đó tôi có được điều này:

File "/python27_runtime/python27_lib/versions/third_party/django-1.4/django/middleware/cache.py", line 205, in __init__ 
self.cache_timeout = self.cache.default_timeout 

AttributeError: 'Client' object has no attribute 'default_timeout' 

AttributeError: 'Khách hàng' đối tượng không có thuộc tính 'default_timeout', nếu tôi sử dụng google backend (django.core.cache.backends.memcached.MemcachedCache) tôi nhận được

Error: ImproperlyConfigured: Error importing middleware django.contrib.sessions.middleware: "No module named memcache". 

Ở đây ai đó hỏi trước đây về việc sử dụng bộ nhớ đệm Django phụ trợ và đề nghị để cài đặt python-memcached, tôi đã làm điều đó và nó vẫn không hoạt động .

Ai đó đã đề xuất viết phụ trợ cho GAE. Tôi không hiểu lắm. Nếu câu trả lời tốt nhất cho câu hỏi này sẽ giải thích từng bước cách viết một phụ trợ rất gần, thì tôi sẽ chấp nhận câu trả lời đó.

+1

Tôi nghĩ rằng bạn sẽ tìm thấy câu trả lời của bạn ở đây: http://stackoverflow.com/questions/1138715/will-djangos-cache-modules-work-on-google-app -engine – nizz

+0

cảm ơn, tôi đã đi những câu trả lời nhiều lần trước khi đăng câu hỏi này ở trên. Nhưng nó thực sự khó hiểu vì hai câu trả lời bình chọn tốt nhất mâu thuẫn với bản thân họ, và nó cũng là một cuộc thảo luận cũ. –

Trả lời

3

Không phải tất cả các hoạt động chức năng của Django trên App Engine. Vì vậy, chức năng bạn đang cố gắng sử dụng là không thể chấp nhận đối với thư viện App Engine Django do hạn chế cơ sở hạ tầng của App Engine.

Nếu tôi hiểu chính xác, bạn muốn lưu toàn bộ một trang hoặc nói cách khác là phản hồi của toàn bộ Chế độ xem? Bạn có thể làm điều này theo cách đó (chỉ dụ):

# Django on App Engine view example 
from google.appengine.api import memcache 
from django.http import HttpResponse 

def cached_index_page(request): 
    output_html = memcache.get('index_page') # here we "take" from cache 
    if output is not None: 
    pass 
    else: 
    output_html = get_page_content() 
    memcache.add('index_page', output_html, 60) # here we "put" to cache" (timeout also here) 
    HttpResponse(output_html) 

Đối với mục đích của bạn, bạn có thể tạo Middleware Django với auto bộ nhớ đệm bất kỳ trang nào bạn cần.

Cũng đảm bảo bạn đã xóa tất cả nội dung không liên quan/không được chấp nhận trên công cụ App Engine từ tệp cấu hình. Xét trang trợ giúp (https://developers.google.com/appengine/articles/django), cấu hình tối thiểu trông giống như:

import os 

# 'project' refers to the name of the module created with django-admin.py 
ROOT_URLCONF = 'project.urls' 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
# 'django.contrib.sessions.middleware.SessionMiddleware', 
# 'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.doc.XViewMiddleware', 
    'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', # NoSQL db middleware 
) 

INSTALLED_APPS = (
# 'django.contrib.auth', 
    'django.contrib.contenttypes', 
# 'django.contrib.sessions', 
    'django.contrib.sites', 
) 

ROOT_PATH = os.path.dirname(__file__) 
TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or 
    # "C:/www/django/templates". Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    ROOT_PATH + '/templates', 
) 

Hãy nhớ rằng, App Engine có bộ nhớ đệm có nguồn gốc riêng, ví dụ Môi trường thời gian chạy Python lưu trữ các mô-đun được nhập khẩu giữa các yêu cầu trên một máy chủ web duy nhất và bạn có thể yêu cầu App Engine lưu lại bộ xử lý CGI, ngoài các mô đun được nhập.

liên kết hữu ích: https://developers.google.com/appengine/articles/django-nonrelhttps://developers.google.com/appengine/docs/python/tools/libraries27

Các vấn đề liên quan