<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GustavoHenrique.net &#187; mod_wsgi</title>
	<atom:link href="http://blog.gustavohenrique.net/tag/mod_wsgi/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gustavohenrique.net</link>
	<description>Tecnologia e Software Livre</description>
	<lastBuildDate>Wed, 25 Jan 2012 10:34:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Problema com cache do mod_wsgi</title>
		<link>http://blog.gustavohenrique.net/2009/01/problema-com-cache-do-mod_wsgi/</link>
		<comments>http://blog.gustavohenrique.net/2009/01/problema-com-cache-do-mod_wsgi/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 11:46:07 +0000</pubDate>
		<dc:creator>gustavohenrique</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[mod_wsgi]]></category>

		<guid isPermaLink="false">http://www.gustavohenrique.net/brogui/?p=67</guid>
		<description><![CDATA[Certo dia terminei um projeto em Django e após vários testes finalmente foi ao ar. Feito isso, liguei para o cliente e marcamos uma reunião para o dia seguinte. Na reunião, conversa vai, conversa vem, o sistema é exibido, tudo funcionando, cliente feliz, eu feliz, tudo ótimo e maravilhoso. Eis então que o cliente sugere [...]]]></description>
			<content:encoded><![CDATA[<p>Certo dia terminei um projeto em Django e após vários testes finalmente foi ao ar. Feito isso, liguei para o cliente e marcamos uma reunião para o dia seguinte. Na reunião, conversa vai, conversa vem, o sistema é exibido, tudo funcionando, cliente feliz, eu feliz, tudo ótimo e maravilhoso. Eis então que o cliente sugere uma pequena alteração: Alterar uma mensagem emitida ao usuário. Tarefa simples, pensei. Vou abrir o arquivo e alterar uma string. Pronto! Nada complicado ou demorado que exija marcar uma nova reunião para apresentar essa mudança. Em casa eu atualizo o arquivo e fica tudo como está. Erro meu ter pensado assim. Após a modificação ter sido feita, o sistema não quis atualizar por nada. Apertei Crtl+F5, limpei o cache do navegador, testei em outros navegadores&#8230; e nada. Só podia ser cache no servidor de hospedagem. Então deletei todos os .pyc e mesmo assim não funcionou. A coisa era do mal mesmo. <span id="more-67"></span><br />
Bom, expliquei ao cliente o que estava acontecendo e ganhei algum tempo para tentar resolver. Percebi que alterações feitas no código da aplicação não eram atualizadas em tempo real. Em outras palavras, se seu projeto já está no servidor de produção usando o mod_wsgi e você alterar o código de uma view ou model, a atualização não será refletida no exato momento.<br />
Não me aprofundei no assunto mas aparentemente o mod_wsgi provê um sistema de cache que leva horas para verificar se houve alterações no código da aplicação. De fato, essa é uma atitude inteligente, pois uma vez que o projeto está em ambiente de produção, nenhuma alteração deveria ser feita naquele espaço. As alterações deveriam ser feitas no ambiente de desenvolvimento e só depois de passar nos testes seria levada ao ambiente de produção.<br />
Então fui pedir ajuda ao oráculo (google) e, após algum tempo, encontrei um site contendo um script que me ajudou bastante naquele momento.</p>
<p>Crie um arquivo chamado monitor.py e ponha-o no diretório do projeto. Abaixo o conteúdo do arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">signal</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">threading</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">atexit</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">Queue</span>
&nbsp;
_interval = <span style="color: #ff4500;">1.0</span>
_times = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
_files = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
_running = <span style="color: #008000;">False</span>
_queue = <span style="color: #dc143c;">Queue</span>.<span style="color: #dc143c;">Queue</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
_lock = <span style="color: #dc143c;">threading</span>.<span style="color: black;">Lock</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> _restart<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>:
  _queue.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
  prefix = <span style="color: #483d8b;">'monitor (pid=%d):'</span> <span style="color: #66cc66;">%</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">getpid</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;&amp;</span>gt<span style="color: #66cc66;">;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>, <span style="color: #483d8b;">'%s Change detected to <span style="color: #000099; font-weight: bold;">\'</span>%s<span style="color: #000099; font-weight: bold;">\'</span>.'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>prefix, path<span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;&amp;</span>gt<span style="color: #66cc66;">;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>, <span style="color: #483d8b;">'%s Triggering process restart.'</span> <span style="color: #66cc66;">%</span> prefix
  <span style="color: #dc143c;">os</span>.<span style="color: black;">kill</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">getpid</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, <span style="color: #dc143c;">signal</span>.<span style="color: black;">SIGINT</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> _modified<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">try</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isfile</span><span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> path <span style="color: #ff7700;font-weight:bold;">in</span> _times
&nbsp;
    mtime = <span style="color: #dc143c;">os</span>.<span style="color: #dc143c;">stat</span><span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>.<span style="color: black;">st_mtime</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> path <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> _times:
      _times<span style="color: black;">&#91;</span>path<span style="color: black;">&#93;</span> = mtime
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> mtime <span style="color: #66cc66;">!</span>= _times<span style="color: black;">&#91;</span>path<span style="color: black;">&#93;</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
  <span style="color: #ff7700;font-weight:bold;">except</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> _monitor<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff4500;">1</span>:
    <span style="color: #ff7700;font-weight:bold;">for</span> module <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">modules</span>.<span style="color: black;">values</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">hasattr</span><span style="color: black;">&#40;</span>module, <span style="color: #483d8b;">'__file__'</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">continue</span>
      path = <span style="color: #008000;">getattr</span><span style="color: black;">&#40;</span>module, <span style="color: #483d8b;">'__file__'</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> path:
        <span style="color: #ff7700;font-weight:bold;">continue</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">splitext</span><span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#91;</span><span style="color: #483d8b;">'.pyc'</span>, <span style="color: #483d8b;">'.pyo'</span>, <span style="color: #483d8b;">'.pyd'</span><span style="color: black;">&#93;</span>:
        path = path<span style="color: black;">&#91;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> _modified<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> _restart<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> path <span style="color: #ff7700;font-weight:bold;">in</span> _files:
      <span style="color: #ff7700;font-weight:bold;">if</span> _modified<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> _restart<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">try</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> _queue.<span style="color: black;">get</span><span style="color: black;">&#40;</span>timeout=_interval<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">except</span>:
      <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
_thread = <span style="color: #dc143c;">threading</span>.<span style="color: black;">Thread</span><span style="color: black;">&#40;</span>target=_monitor<span style="color: black;">&#41;</span>
_thread.<span style="color: black;">setDaemon</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> _exiting<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">try</span>:
    _queue.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">except</span>:
    <span style="color: #ff7700;font-weight:bold;">pass</span>
  _thread.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">atexit</span>.<span style="color: black;">register</span><span style="color: black;">&#40;</span>_exiting<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> track<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> path <span style="color: #ff7700;font-weight:bold;">in</span> _files:
    _files.<span style="color: black;">append</span><span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> start<span style="color: black;">&#40;</span>interval=<span style="color: #ff4500;">1.0</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">global</span> _interval
  <span style="color: #ff7700;font-weight:bold;">if</span> interval <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;</span> _interval:
    _interval = interval
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">global</span> _running
  _lock.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> _running:
    prefix = <span style="color: #483d8b;">'monitor (pid=%d):'</span> <span style="color: #66cc66;">%</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">getpid</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;&amp;</span>gt<span style="color: #66cc66;">;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>, <span style="color: #483d8b;">'%s Starting change monitor.'</span> <span style="color: #66cc66;">%</span> prefix
    _running = <span style="color: #008000;">True</span>
    _thread.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  _lock.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Para finalizar a configuração, altere o arquivo de configuração do mod_wsgi de modo a conter as duas últimas linhas do código abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/usuario/www/apps_wsgi'</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span>=<span style="color: #483d8b;">'meuprojeto.settings'</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> meuprojeto.<span style="color: black;">monitor</span>
meuprojeto.<span style="color: black;">monitor</span>.<span style="color: black;">start</span><span style="color: black;">&#40;</span>interval=<span style="color: #ff4500;">1.0</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Feito isso as alterações no código serão atualizadas no navegador em tempo real.<br />
Lamento não inserir uma referência para o site do qual copiei o script, pois já faz algum tempo e não me lembro mais o nome nem a URL.</p>
<h2>Links Relacionados</h2>
<p><a href="http://blog.dscpl.com.au/2009/02/source-code-reloading-with-modwsgi-on.html">http://blog.dscpl.com.au/2009/02/source-code-reloading-with-modwsgi-on.html</a><br />
<a href="http://blog.dscpl.com.au/2008/12/using-modwsgi-when-developing-django.html">http://blog.dscpl.com.au/2008/12/using-modwsgi-when-developing-django.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gustavohenrique.net/2009/01/problema-com-cache-do-mod_wsgi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Configurando Apache para trabalhar com Django e PHP</title>
		<link>http://blog.gustavohenrique.net/2009/01/servidor-compartilhado-django-php-configurando-virtualhost-no-apache-com-mod_wsgi/</link>
		<comments>http://blog.gustavohenrique.net/2009/01/servidor-compartilhado-django-php-configurando-virtualhost-no-apache-com-mod_wsgi/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 14:20:51 +0000</pubDate>
		<dc:creator>gustavohenrique</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_wsgi]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[virtualhost]]></category>

		<guid isPermaLink="false">http://www.gustavohenrique.net/brogui/?p=54</guid>
		<description><![CDATA[Introdução Como primeiro artigo do ano, vou mostrar de forma bem rápida como configurar o Apache no Linux para trabalhar com Django e com PHP ao mesmo tempo. Para tal, foi usada a instalação padrão do Apache2 com PHP5 do Ubuntu no servidor de desenvolvimento. O mod_wsgi é um módulo para o Apache que permite [...]]]></description>
			<content:encoded><![CDATA[<h2>Introdução</h2>
<p>Como primeiro artigo do ano, vou mostrar de forma bem rápida como configurar o Apache no Linux para trabalhar com Django e com PHP ao mesmo tempo. Para tal, foi usada a instalação padrão do Apache2 com PHP5 do Ubuntu no servidor de desenvolvimento.<br />
O mod_wsgi é um módulo para o Apache que permite executar aplicações web escritas em Python. Trata-se de uma alternativa ao mod_python e ao FastCGI.<br />
<span id="more-54"></span></p>
<h2>Instalação</h2>
<p>O primeiro passo é instalar o mod_wsgi. No meu caso instalei a partir do repositório do Ubuntu, via apt-get:<br />
<code>root@notebook:~# apt-get install libapache2-mod-wsgi</code><br />
Nesse exemplo vamos utilizar o diretório padrão do Apache (<code>/var/www</code>) para hospedar os projetos feitos em Django e PHP. Abaixo a estrutura de diretório utilizada:<br />
<code><br />
+ /var/www/<br />
+--+ meusite/<br />
     +-- apps_wsgi/<br />
     |   +-- djangosite/<br />
     +-- www/<br />
</code></p>
<p>var/www &#8211; Diretório padrão do Apache<br />
meusite &#8211; Diretório do projeto<br />
apps_wsgi &#8211; Diretório de projetos feitos em Django<br />
djangosite &#8211; Projeto em Django, criado com o django-admin<br />
www &#8211; Diretório de arquivos PHP</p>
<p>Antes de criarmos o VirtualHost, é preciso configurar o <code>/etc/hosts</code>. Vamos atribuir um IP de loopback uma vez que o Apache está sendo executado na máquina local que é um ambiente de desenvolvimento.<br />
Segue abaixo o conteúdo do <code>/etc/hosts</code> já alterado. A primeira coluna é o IP do servidor virtual, a segunda é o hostname e a terceira é um alias para o hostname.<br />
<code><br />
gustavo@notebook:~# cat /etc/hosts<br />
127.0.0.1 localhost     notebook<br />
127.0.0.2 www2.meusite.com.br meusite<br />
</code><br />
Reparem que não configurei o hostname como www.meusite.com.br, pois senão o Apache responderia à toda requisição feita para essa URL, logo não conseguiríamos acessar o site na web. Se testarmos dar um ping para <code>meusite</code> vamos obter uma resposta sem perda de pacotes.</p>
<p>O próximo passo é criar um VirtualHost para nosso projeto. Com VirtualHost é possível hospedar vários sites no Apache, cada um sendo representado por um nome. Vamos criar nosso VirtualHost após a última linha do arquivo de configuração <code>/etc/apache2/sites-enabled/000-default</code> do Apache:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">WSGIRestrictStdout Off
&lt;virtualHost www2.meusite.com.br&gt;
  LimitInternalRecursion 1000
  ServerName meusite
  DocumentRoot /var/www/meusite/www/
&nbsp;
  ErrorLog /var/www/meusite/error.log
  LogLevel warn
&nbsp;
  &lt;directory &quot;/var/www/meusite/www/&quot;&gt;
    Order allow,deny
    Allow from all
  &lt;/directory&gt;
&nbsp;
  AddHandler wsgi-script .wsgi
  #WSGIScriptAlias /meusite/ &quot;/var/www/meusite/www/meusite.wsgi&quot;
  &lt;directory &quot;/var/www/meusite/apps_wsgi/&quot;&gt;
    AllowOverride FileInfo
    Options ExecCGI MultiViews FollowSymLinks
    MultiviewsMatch Handlers
    Order deny,allow
    Allow from all
  &lt;/directory&gt;
&lt;/virtualHost&gt;</pre></div></div>

<p>Então agora criamos o arquivo <code>/var/www/meusite/www/meusite.wsgi</code> com o seguinte conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/var/www/meusite/apps_wsgi'</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span>=<span style="color: #483d8b;">'meusite.settings'</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>E para finalizar, vamos criar um arquivo <code>.htaccess</code> dentro do <code>DocumentRoot</code>. Esse arquivo utiliza o <code>mod_rewrite</code> do Apache para sobrescrever URLs. Nesse exemplo o <code>.htaccess</code> verifica todas as requisições feitas ao servidor, e caso não exista o arquivo dentro do diretório <code>www</code>, quem assume o controle é o Django.<br />
<code><br />
$ cat /var/www/meusite/www/.htaccess<br />
RewriteEngine On<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteRule ^(.*)$ /var/www/meusite/www/meusite.wsgi/$1 [QSA,PT,L]<br />
</code></p>
<h2>Conclusão</h2>
<p>Para testar, crie o arquivo <code>/var/www/meusite/www/info.php</code> contendo a seguinte linha:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span> <span style="color: #990000;">phpinfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Agora tente acessa a URL <code>http://www2.meusite.com.br/info.php</code> e será exibida na tela informações sobre o ambiente web instalado na máquina. Agora se tentar acessar um arquivo que não existe, tipo <code>http://www2.meusite.com.br/qualquercoisa</code>, o <code>.htaccess</code> redirecionará a requisição para o arquivo <code>urls.py</code> do projeto feito em Django.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gustavohenrique.net/2009/01/servidor-compartilhado-django-php-configurando-virtualhost-no-apache-com-mod_wsgi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

