2011-01-03 4 views
0

Je suis en train d'installer Django sur un hôte partagé en suivant les instructions suivantes: docs.google.com/View?docid=dhhpr5xs_463522gDjango installer sur un hôte partagé, .htaccess aider

Mon problème est le suivant ligne sur mon .htaccess racine:

RewriteRule ^(.*)$ /cgi-bin/wcgi.py/$1 [QSA,L] 

Quand je cette ligne j'inclure obtiens une erreur 500 avec presque tous mes domaines sur ce compte.

Ma cgi-bin est à la maison/mon-nom d'utilisateur/public_html/cgi-bin/

Le fichier wcgi.py contient:

#!/usr/local/bin/python 

import os, sys 

sys.path.insert(0, "/home/username/django/") 
sys.path.insert(0, "/home/username/django/projects") 
sys.path.insert(0, "/home/username/django/projects/newprojects") 

import django.core.handlers.wsgi 

os.chdir("/home/username/django/projects/newproject") # optional 
os.environ['DJANGO_SETTINGS_MODULE'] = "newproject.settings" 

def runcgi(): 
    environ      = dict(os.environ.items()) 
    environ['wsgi.input']  = sys.stdin 
    environ['wsgi.errors']  = sys.stderr 
    environ['wsgi.version']  = (1,0) 
    environ['wsgi.multithread'] = False 
    environ['wsgi.multiprocess'] = True 
    environ['wsgi.run_once']  = True 

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

    if environ.get('HTTPS','off') in ('on','1'): 
     environ['wsgi.url_scheme'] = 'https' 
    else: 
     environ['wsgi.url_scheme'] = 'http' 

    headers_set = [] 
    headers_sent = [] 

    def write(data): 
     if not headers_set: 
      raise AssertionError("write() before start_response()") 

     elif not headers_sent: 
      # Before the first output, send the stored headers 
      status, response_headers = headers_sent[:] = headers_set 
      sys.stdout.write('Status: %s\r\n' % status) 
      for header in response_headers: 
       sys.stdout.write('%s: %s\r\n' % header) 
      sys.stdout.write('\r\n') 

     sys.stdout.write(data) 
     sys.stdout.flush() 

    def start_response(status,response_headers,exc_info=None): 
     if exc_info: 
      try: 
       if headers_sent: 
        # Re-raise original exception if headers sent 
        raise exc_info[0], exc_info[1], exc_info[2] 
      finally: 
       exc_info = None  # avoid dangling circular ref 
     elif headers_set: 
      raise AssertionError("Headers already set!") 

     headers_set[:] = [status,response_headers] 
     return write 

    result = application(environ, start_response) 
    try: 
     for data in result: 
      if data: # don't send headers until body appears 
       write(data) 
     if not headers_sent: 
      write('') # send headers now if body was empty 
    finally: 
     if hasattr(result,'close'): 
      result.close() 

runcgi() 

Seulement j'ai changé le "nom d'utilisateur" à mon nom d'utilisateur ...

+0

Mais votre hôte partagé est en mesure d'exécuter Python? Je suis sûr que c'est juste pour confirmer. Y a-t-il une chance de se procurer le fichier 'error.log' d'Apache pour voir le message d'erreur exact? Cela peut être difficile sans cette information –

+0

ne semble pas avoir accès à error.log ... mon hôte exécute Python (plusieurs modules) ... peut-être va vérifier avec eux d'abord à propos de voir le journal ?? – redconservatory

Répondre

0

On dirait que je devrais utiliser FastCGI avec mon service d'hébergement:

AddHandler fcgid-script .fcgi 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L] 
Questions connexes