Найти - Пользователи
Полная версия: Вопрос по развертыванию под Apache
Начало » Django » Вопрос по развертыванию под Apache
1 2
timas
Apache, mod_python все стало нормально, по крайней мере запускается.
Django проект назывался intras (C:\Python25\Lib\site-packages\django\bin\intras - здесь все лежало)
Вот, то что в ней лежало копирую в папку Apache для документов по умолчанию C:\Apache2.2\htdocs
То что написал в httpd.conf:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE intras.settings
PythonDebug On
PythonAutoReload Off
PythonPath "['htdocs', 'C:/Python25/lib/site-packages/django'] + sys.path"
</Location>

<Location "/static/">
SetHandler None
</Location>
Вот что в браузере:
MOD_PYTHON ERROR

ProcessId: 3712
Interpreter: 'vaertas-37debf8.vaertas.ru'

ServerName: 'vaertas-37debf8.vaertas.ru'
DocumentRoot: 'C:/Apache2.2/htdocs'

URI: '/'
Location: '/'
Directory: None
Filename: 'C:/Apache2.2/htdocs/'
PathInfo: ''

Phase: 'PythonHandler'
Handler: 'django.core.handlers.modpython'

Traceback (most recent call last):

File "C:\Python25\lib\site-packages\mod_python\importer.py", line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File "C:\Python25\lib\site-packages\mod_python\importer.py", line 1229, in _process_target
result = _execute_target(config, req, object, arg)

File "C:\Python25\lib\site-packages\mod_python\importer.py", line 1128, in _execute_target
result = object(arg)

File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 177, in handler
return ModPythonHandler()(req)

File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 145, in __call__
self.load_middleware()

File "C:\Python25\lib\site-packages\django\core\handlers\base.py", line 31, in load_middleware
raise exceptions.ImproperlyConfigured, 'Error importing middleware %s: "%s"' % (mw_module, e)

ImproperlyConfigured: Error importing middleware django.contrib.sessions.middleware: "No module named intras"
В settings.py отключаю django.contrib.sessions.middleware.SessionMiddleware ну и т.д. получаю:
ImportError at /
No module named intras.urls
Request Method: GET
Request URL: http://localhost/
Exception Type: ImportError
Exception Value: No module named intras.urls
Exception Location: C:\Python25\lib\site-packages\django\core\urlresolvers.py in _get_urlconf_module, line 177
Что у меня не так с путями?
timas
Может вместо intras стоило назвать его localhost. С путями уже все перепробовал….
timas
Кстати секция в httpd.conf на самом деле выглядит так:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonDebug On
PythonAutoReload Off
PythonPath "['htdocs', 'C:/Python25/lib/site-packages/django'] + sys.path"
</Location>

<Location "/static/">
SetHandler None
</Location>
Александр Кошелев
А где проект лежит?
timas
Daevaorn спасибо. Сам разобрался, прошу у всех прощения за идиотский вопрос просто из всех файлов надо было убрать intras(имя проекта в django), просто смутило то что он в самом начале ругался на сессии.
timas
Бесценный опыт:) для других новичков для тех у кого winXP, Python 2.5.2, mod_python 3.3.1, Django 0.96.2, MySQL-python 1.2.2 и т.д.
Влюбился я в одну девушку и чтобы быть к ней поближе, устроился на работу где она и работала, я программист, она - менеджер по кадрам.
Любовь тем не менее прошла достаточно быстро, хотя была очень бурной и сильной. Теперь думаю увольняться или нет. Но рассказ не об этом.
Пришлось изучать новую платформу (Django), и язык новый (Python), при жутком нежелании поначалу, и дикой нехватке рабочего и свободного времени.
Вот и тут возникла новая любовь, настолько сильная, что захотелось послать подальше следующие вещи: PHP, ASP.NET и C#, и теперь, я точно знаю что следующие системы я буду стараться делать не на C#, как было последние несколько нет, а на Python, а если они и сетевые то и с Django (в виде web-приложений). Если нет особых проблем с javascript/ajax/css/, версткой, то вообще красота.

Почему Python и Django.
У меня не было времени, чтобы разбираться во всех тонкостях, нужно было делать. В нашей организации, несмотря на то что на всех системах стоит xp и менять на что то другое не собираются к технологиям Microsoft относятся не очень.
Поэтому запретили делать на ASP.NET, но и требовалось сделать на фреймоворке, причем не на PHP-шном, здесь PHP тоже считают бесперспективным, так что всякие Zend были в пролете, вообщем был выбор или Ruby On Rails или Python On Django.
Ни того ни другого я не знал, Python выбрал потому что он мне пригодится в других вещах. Приходилось, делать и одновременно изучать. Так тоже можно, но теории все равно не хватает.

Некоторые наблюдения, если это поможет хоть одному новичку такому же как я, значит писал не зря:

1. Проблема которую пришлось решать сегодня
Apache 2.0.46 и mod_python для Apache 2.0 ни фига не катят, cannot load module и все такое.
Если есть желание разобраться с этой ошибкой разбирайтесь, я же просто поставил Apache 2.2.29 mod_python для Apache 2.2 и никаких проблем, все стало сразу.
В httpd.conf:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonDebug On
PythonAutoReload Off
PythonPath "['htdocs', 'C:/Python25/lib/site-packages/django'] + sys.path"
</Location>
Все ложил в htdocs (папка апача по умолчанию) далее прописываем DNS на серваке и не нужно парится с хостами, портами. По умолчанию и так должно все работать по сети.

2. Как я понял проблема №1 для любого новичка, напишу лишний раз хуже не будет.
при разработке используя встроенный сервер “статика”(картинки, css, js) не видны.
Так что ложите их в отдельную папку например static
После этого в urls.py к urlpatterns добавить
(r'^static/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
в settings.py соответственно
MEDIA_ROOT = 'static'
MEDIA_URL = ''
ADMIN_MEDIA_PREFIX = '/media/'
Ну и в HTML соответственно указывать путь /static/img/logo.gif или /static/js/bresize.js
при переносе на апач в httpd.conf нужно будет добавить
<Location "/static/">
SetHandler None
</Location>
3. Как я понял проблема №2 для любого новичка - кодировка.
Народ используйте utf-8, если делаете с ноля тем более!
В скриптах Python в начале файла, добавляете:
# -*- coding: utf-8 -*-
В HTML-шаблонах:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Файлы тоже полезно сохранять как utf-8 а не ANSI:)

Для базы (я использовал MySQL):
При создании таблицы не забывайте про
CHARACTER SET utf8 COLLATE utf8_general_ci;
Если не используете ORM, как я то и
cursor.execute("SET NAMES utf8")
Если у вас данные передаются в шаблон например в виде списка, то перебираете в цикле for иначе у вас вместо русских символов будет что-то вроде /x8383/x3434, это гораздо лучше чем ????? конечно:) но может испугать поначалу..
т.е :
{% for folder in folders %}
...{{ folder.0 }}..... {{ folder.1 }}
{% endfor %}
4. Для списков мультивыбора или групп checkbox-ов, используем getList, например:
grpGroups=request.POST.getlist('grpGroups')
Остальное все специфично и решалось как правило заглядыванием в учебник, документацию и http://www.cargo.caml.ru/djangobook/ - Вещь!

P.S. Все что я написал, не значит что так и надо делать, я такой же новичок как и вы, и ничего еще не знаю про Python и Django, просто так как сделал я, заработало.
Ferroman
(r'^static/(.*)$', ‘django.views.static.serve’, {'document_root': settings.MEDIA_ROOT}),
Так делать - не безопасно, на боевом сервере так делать нельзя.
Если у вас данные передаются в шаблон например в виде списка, то перебираете в цикле for иначе у вас вместо русских символов будет что-то вроде /x8383/x3434, это гораздо лучше чем ????? конечно:) но может испугать поначалу..
Что-то я не понял суть прблемы решение которой тут описано.
timas
Ferroman
Так делать - не безопасно, на боевом сервере так делать нельзя.
Почему, разьясни пожалуйста.
Ferroman
Честно говоря - не вникал. Просто верю разработчикам на слово (How to serve static files).
The big, fat disclaimer
Using this method is inefficient and insecure. Do not use this in a production setting. Use this only for development.
For information on serving static files in an Apache production environment, see the Django mod_python documentation.
timas
А если в http.conf написать так:
<Location "/static/">
SetHandler None
</Location>
А из urls.py убрать получается что статику уже отдает Apache?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB