segunda-feira, 22 de agosto de 2011

Servidor Django de baixo custo na kinghost

Há alguns meses contratei os serviços de hospedagem do kinghost pois precisava de um servidor somente para apresentar os resultados dos meus projetos (sem muitos acessos) e não queria me preocupar com todos os detalhes que evolvem as configurações de um servidor de produção no Linode por exemplo.

Os serviços do kinghost custam em torno de R$15 / mês e me atendem sem problema. (Essa também é uma boa opção para quem quer um servidor localizado fisicamente no Brasil.) Lembrando que escolhi esse plano e servidor pois quase não preciso de suporte (apenas para instalar alguns pacotes) fiz todas estas configurações estudando sozinho e não encontrei muito material a respeiro no kinghost.

No servidor:
  • CentOS
  • Python 2.4.3
    • Não precisei modificar
  • Django 1.0.4 final
  • Apache/2.2.3
  • mod_WSGI DAEMON MODE
  • SVN
    • Uso Mercurial (ou GIT)
  • Arquivos estáticos (poste abaixo)

    A versão python utilizada me atende sem problemas (creio que seja possível modificar via chamado).
      Para deploy e controle de versão eficientes deixei de lado o SVN e criei uma conta no Bitbucket que usa o Mercurial (O mesmo é possível usando Github e Git). Assim criei duas contas uma para mim e outra para o servidor quando finalizo uma versão local envio para o Bitbucket e depois atualizo (hg pull) no servidor realizando assim o deploy e o controle de versão.

      Boa sorte a todos!

      quinta-feira, 18 de agosto de 2011

      Django Pinax static css js corrigir links quebrados kinghost

      Continuando as configurações do kinghost se tudo o que está no poste anterior deu certo ainda há o problema dos arquivos estáticos para resolver.

      .../settings.py
       STATIC_URL = "/site_media/static/"  
       ...  
       ADMIN_MEDIA_PREFIX = posixpath.join(STATIC_URL, "admin/")  
      

      Nos aquivos dos templates
      .../base.html
       <link href="{{ STATIC_URL }}pinax/css/base.css" rel="stylesheet">  
      
      que aponta para:
       <link href="/site_media/static/pinax/css/base.css" rel="stylesheet">  
      

      Na pasta "home" no servidor há um arquivo chamado "www" que seria o "/" dos aquivos estáticos, logo se eu preciso de "/site_media/static/pinax/css/base.css" na aplicação crio um link simbólico "site_media -> /home/<seu_nome>/apps_wsgi/<nome_do_projeto>/site_media" (link site_media apontando para site_media dentro do meu projeto) dentro de "www".

      Exemplo:
       ~/www  
          /site_media -> /home/<você>/apps_wsgi/dev/site_media  
                    /static -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/pinax/media/default  
      

      No Admin.
      .../Base.html
       <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />  
      
      que aponta para:
       <link href="/site_media/static/admin/css/base.css" type="text/css" rel="stylesheet">  
      

      Logo dentro da pasta "~/www/site_media/static/" tenho que criar a pasta admin/ e apontar para os arquivos estáticos. Entre outras que também serão necessárias.

      Exemplo:
       ~/www/site_media/static  
                   /admin -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/django/contrib/admin/media/  
                   /css -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/pinax/projects/basic_project/media/css  
                   /js -> /home/<você>/apps_wsgi/dev/media/js  
                   /uni_form -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/uni_form/media/uni_form  
       ...  
      

      E assim por diante até que o console do Chrome ou o firebug não tenha mais erros 404.

      Fontes:
      Django static files - https://docs.djangoproject.com/en/dev/howto/static-files/

      domingo, 7 de agosto de 2011

      Como instalar Pinax 0.9 e Django 1.2.3 com virtualenv no kinghost

      Servidor Kinghost:
      • CentOS - Linux imia.kinghost.net Kernel 2.6.31
      • Python 2.4.3
      • Django 1.0.4 final
      • Apache/2.2.3 - Jan 15 2008 20:33:30
        • mod_WSGI DAEMON MODE

      Preciso modificar o Django para versão 1.2.3 para instalar o Pinax 0.9a (última versão).

      Instalando virtualenv:
       $ easy_install virtualenv  
      
      Criando um ambiente de desenvolvimento no virtualenv:
       $ python /home/<seu-nome>/apps_wsgi/.site-packages/virtualenv <seu-ambient> 

      Instalando PIL - Python Image Library
       $ easy_install PIL  
      

      Instalando Pinax 0.9 (versão de desenvolvimento):
       $ pip install Pinax  
      

      Entre no ambiente criado
       $ source <seu-ambient>/bin/activate  
      

      Escolha um dos projetos Pinax
       $ pinax-admin setup_project -l  
      

      Clone o projeto (clonando "social" no exemplo abaixo)
       $ pinax-admin setup_project -b social dev 

      Para esse exemplo chamei meu projeto de "dev" e logo depois o renomei para "_dev":
       $ mv dev _dev 

      Assim eu posso ir até o painel de controle e criar um projeto Django com o nome "dev" e após finalizado o processo de criação copiar o conteúdo da pasta "_dev" para "dev" aproveitando assim todas as configurações no servidor e do meu projeto Pinax.

      Para finalizar é preciso modificar o arquivo dev.wsgi:
       import os, sys  
       activate_this = '/home/<seu-nome>/pinax/pinax-dev/bin/activate_this.py'  
       execfile(activate_this, dict(__file__=activate_this))  
       paths=['/home/<seu-nome>/apps_wsgi',  
           '/home/<seu-nome>/apps_wsgi/dev/apps']  
       for path in paths:  
         if path not in sys.path:  
           sys.path.append(path)  
       os.environ['PYTHON_EGG_CACHE'] = '/home/<seu-nome>/apps_wsgi/.python-eggs'  
       os.environ['DJANGO_SETTINGS_MODULE']='dev.settings'  
       from django.core.handlers.wsgi import WSGIHandler  
       application=WSGIHandler()  
      

      Fontes:
      Pinax - http://pinaxproject.com/docs/dev/gettingstarted/
      Pinax Docs - http://pinaxproject.com/docs/dev/
      VirtualEnv - http://www.arthurkoziel.com/2008/10/22/working-virtualenv/
      WSGI - http://code.google.com/p/modwsgi/wiki/VirtualEnvironments

      segunda-feira, 25 de julho de 2011

      Django página de erro 403, customizar template

      Hoje precisei alterar e customizar a página de erro 403 (acesso negado) do Django. Como não encontrei um tutorial simples para apenas modicar o template da página resolvi escrever o que fiz.

      Descobri que existe um arquivo em ".../site-packages/django/views/csrf.py" que é responsável pela página de erro 403 no Django padrão.

      Dai copiei o arquivo completo para a pasta do meu projeto. (.../meu-projeto/csrf.py)

      Depois adicionei:

      .../settings.py
       ...  
       CSRF_FAILURE_VIEW = 'csrf.csrf_failure'  
       ...   
      

      Pronto!

      Dentro do arquivo csrf.py há o html usado na mensagem de erro 403 assim você pode alterar esse html como preferir.

      Pelos mesmos motivos que fizeram os desenvolvedores deixarem o html no arquivo csrf.py eu prefiro manter e alterar o html dentro do arquivo.

      Mas você pode criar um arquivo 403.htlm na pasta de templates.

      Logo adicione:
      .../csrf.py
       ...  
       #from django.template import Context, Template  
       from django.template import Context, Template, loader  
       ...  
       def csrf_failure(request, reason=""):  
         ...  
         try:
            t = loader.get_template('403.html')
         except:
            t = Template(CSRF_FAILRE_TEMPLATE)# Se o template nao for encontrado
         ...  
      

      Nesse exemplo o tratamento da exceção vai abrir arquivo 403.html não existir ocorrerá um erro e abrirá o CSRF_FAILRE_TEMPLATE contido acima no arquivo.

      Divirta-se ^-^

      fontes:
      https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-CSRF_FAILURE_VIEW
      http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/

      Easy Django em Português

      Boa tarde,

      após pensar um pouco decidi escrever minhas postagens em Português pois dessa forma pretendo ajudar aqueles que aqui no Brasil encontram dificuldades com a documentação em Inglês.

      Good afternoon,

      after think while I've decided to write my posts at Portuguese with the intention of help those that here in Brazil have difficulty to the English documentation.

      quinta-feira, 9 de junho de 2011

      Hello everybody!

      Easy Django Installation Script was updated to Django version 1.2.5.
      Enjoy ^-^

       $ git clone git@github.com:morenopc/Easy-Django-Scripts.git  
       $ cd Easy-Django-Scripts  
       $ chmod 755 easy_install_django.sh  
       $ ./easy_install_django.sh  
      

      * The script will ask you to create a mySQL account and the root password after that the password will required to create the Django tables.

      After you followed the instructions open http://127.0.0.1:8000/ and see the Django Hello World page.

      This script is just a quick start please check http://www.djangoproject.com/ for tutorials and more information.

      Moreno at Campus Party 2011