python MemoryError в виртуальном хостинге - PullRequest
2 голосов
/ 18 октября 2011

Я пытался развернуть django на общем веб-хосте, который не является специфичным для django. Host предлагает старую версию python, но, поскольку у меня есть возможность доступа по ssh, мне удалось расширить установку python с помощью необходимых мне модулей (включая django), установив их локально в моей домашней папке. Итак, я создал проект django, сделал твики, которые нужно было сделать (настройка глобалов PYTHONPATH и PATH и т. Д.), Сделал скрипт django.fcgi, который запускает django и сделал ./django.fcgi из оболочки. Это ответ:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Traceback (most recent call last):
  File "/home/tentacle/lib/python2.4/site-packages/flup-1.0.3.dev_20110405-py2.4.egg/flup/server/fcgi_base.py", line 574, in run
    protocolStatus, appStatus = self.server.handler(self)
  File "/home/tentacle/lib/python2.4/site-packages/flup-1.0.3.dev_20110405-py2.4.egg/flup/server/fcgi_base.py", line 1159, in handler
    result = self.application(environ, start_response)
  File "/home/tentacle/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 272, in __call__
    response = self.get_response(request)
  File "/home/tentacle/lib/python2.4/site-packages/django/core/handlers/base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/home/tentacle/lib/python2.4/site-packages/django/core/handlers/base.py", line 202, in handle_uncaught_exception
    from django.views import debug
  File "/home/tentacle/lib/python2.4/site-packages/django/views/debug.py", line 9, in <module>
    from django.template import (Template, Context, TemplateDoesNotExist,
  File "/home/tentacle/lib/python2.4/site-packages/django/template/__init__.py", line 53, in <module>
    from django.template.base import (ALLOWED_VARIABLE_CHARS, BLOCK_TAG_END,
MemoryError
Status: 500 Internal Server Error
Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>Unhandled Exception</title>
</head><body>
<h1>Unhandled Exception</h1>
<p>An unhandled exception was thrown by the application.</p>
</body></html>

Итак, я знаю, что эта проблема связана с ограниченным объемом памяти для моего пользователя (не так?), Но настолько ли он низок, что я не могу запустить голое django? Хуже того, месяц назад тот же провайдер дал мне тестовую учетную запись, и он смог не только запустить django, но и установить локально более новую версию python и запустить ее. Я попросил поддержки моего веб-хостинга за помощью, но я не получил никакого полезного ответа. Кроме того, поскольку они являются торговыми посредниками, я не очень уверен, насколько они помогают.

Есть ли способ преодолеть эту проблему? Любое предложение приветствуется.

Заранее спасибо

----------------------------------- Update ----------- ---------------------------------------

#!/home/<username>/bin/python
import os, sys

sys.path.insert(0, "/home/<username>/djangoprojects")
sys.path.insert(0, "/home/<username>/djangoprojects/testproject")
os.environ['PATH']= "/home/<username>/bin:"+os.environ['PATH']

os.environ['DJANGO_SETTINGS_MODULE'] = 'testproject.settings'

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

Вот так выглядит моя конфигурация. Я должен признать, что произошла небольшая ошибка (путь интерпретатора), но путь к файлу «настроек» был хорошим.

После исправления пути интерпретатора к правому, сначала я получил StringError (некоторая строка документа с тройными кавычками в одном из файлов djangos не была закрыта - хм, вряд ли), чем при следующем запуске MemoryError , и снова MemoryError и так далее. Через некоторое время (час) я попытался снова выполнить сценарий (дальнейшие изменения не вносились) и постоянно заканчивался Ошибка сегментации (ядро сброшено) .

Есть предложения?

1 Ответ

0 голосов
/ 19 октября 2011

При запуске из командной строки необходимо явно указать параметры Django. Предполагая, что вы запускаете скрипт из той же папки, в которой находится settings.py:

import os, sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

# ... rest of your startup script...

Кроме того, проверьте, что в вашем .htaccess файле все еще есть правильный RewriteRule для вашего .fcgi сценария.

...