Atualizar versão do Django na Locaweb 1.3.1 – versão mais nova

Post Atualizado em: 12 de Setembro de 2011

Este post é destinado a quem hospeda seus websites em Django na Locaweb e quer usar a versão mais nova do Django.

Por default é oferecido o Django versão 1.1.1, mas se você quer atualizá-lo para a última versão (hoje 1.3.1) e para futuras novas versões, basta seguir estes passos abaixo:

1 – Criar o diretório .python/lib – aqui é onde será instalados todos os pacotes desejados:

mkdir -p $HOME/.python/lib

2 – Acessar o diretório home:

cd $HOME

3 – Editar o arquivo .bashrc:

vi .bashrc

4 – Acrescentar esta linha no arquivo:

export PYTHONPATH=$HOME/.python/lib

5 – Atualizar o .bashrc:

source .bashrc

6 – Criar uma pasta de instaladores:

mkdir -p $HOME/instaladoresPython

7 – Acessar a pasta de instaladores:

cd $HOME/instaladoresPython

8 – Fazer o download do django novo (1.3):

wget http://media.djangoproject.com/releases/1.3/Django-1.3.1.tar.gz

9 – Instalar o django no diretório do usuário:

easy_install-2.6 -d $HOME/.python/lib/ Django-1.3.tar.gz

10 – Editar o arquivo index.wsgi na pasta home de sua aplicação:

vi $HOME/public_html/minhaapp/index.wsgi

11 – Acrescentar estas duas linhas logo no começo do arquivo index.wsgi:

import site
site.addsitedir('/home/storage/e/90/a3/seudominioaqui/.python/lib')

Observação: É necessário colocar o caminho completo, não funciona apelidos tais como $HOME.

12 – Pronto ! Vamos agora conferir se foi instalado corretamente

Verificando a versão do Django

Observações:
1 – Não é necessário colocar a linha addsitedir em nenhum arquivo .py, apenas no index.wsgi
2 – Leva um tempo para as alterações na Locaweb surtirem efeito, o apache carrega a cada 3 horas aproximadamente
3 – Sempre que fizerem algum ajuste em sua aplicação use o comando “touch index.wsgi” para que o apache perceba que é necessário recarregar sua aplicação
4 – Sejam Felizes

Referência: http://wiki.locaweb.com.br/pt-br/Modulos

Legal, estamos usando a última versão !!! Eu mesmo uso isto para trabalhar sempre na última versão oficial do Django !

Abraços a todos e até a próxima !

Victor Jabur

18 Comments

  1. […] This post was mentioned on Twitter by Locaweb and Felipe Kenobi, Victor Jabur. Victor Jabur said: Atualizar versão do Django na Locaweb 1.2.5 – versão mais nova http://wp.me/pVXBl-3U […]

  2. Leandro Mouta says:

    Victor, não teria um jeito mais simples de fazer esse passo 7? Estou querendo hospedar uma aplicação Django na Locaweb mas ter que colocar essas linhas em todos os arquivos .py é meio brochante rs.

    De qualquer forma, valeu pela ajuda. Acredito que seu post vai ajudar muitas pessoas.

    • victorjabur says:

      Eu sei que é bem brochante, mas é o único jeito que a locaweb disponibiliza.

      Olhe este link: http://wiki.locaweb.com.br/pt-br/Modulos

      Este trecho:

      “No arquivo .py em que utiliza o caminho deverá inserir as seguintes linhas para que o caminho inserido acima seja utilizado :
      import sys
      import site
      site.addsitedir(‘/home/seulogin/.python/lib’)”

      Este site.addsitedir é um jeito que você fala pro python para ele considerar a sua pasta de plugins antes dos plugins instalados no sistema operacial (precedência de imports).

      Na minha opnião, deveria tudo funcionar sem esta linha porque você setou o classpath colocando sua pasta customizada:

      >> sys.path
      [”, ‘
      /home/login_ftp/.python/lib’, ‘/usr/lib/python26.zip’, ‘/us

      Logo, ele deveria pegar a sua classe sem ter que ficar colocando este site.addsitedir.

      Não cheguei a tentar uma alternativa a isto, mas o teste que eu fiz de tirar esta linha sitedir, fiz assim:

      # site.addsitedir comentado
      import django

      Neste esquema, ele pegou a versão do django da locaweb (antiga)

      que tal abrir um chamado na locaweb e/ou perguntar para o pessoal da lista python sobre isso ? se existe alguma alternativa.

      Vou investigar isso e em breve atualizo uma resposta.

  3. fkrul says:

    Victor, as tres linhas informadas tem que ser colocadas tambem no index.wsgi do diretorio public_html??, porque até agora nao consegui e está dando os seguintes erros:

    [Wed May 11 09:16:26 2011] [error] [client 187.5.49.62] mod_mime_magic: invalid type 0 in mconvert().
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] mod_wsgi (pid=27186): Exception occurred processing WSGI script ‘/home/storage/2/22/07/vestibular3/public_html/moodle/index.wsgi’.
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] Traceback (most recent call last):
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] File “/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py”, line 230, in __call__
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] self.load_middleware()
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] File “/usr/lib/python2.6/site-packages/django/core/handlers/base.py”, line 42, in load_middleware
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] raise exceptions.ImproperlyConfigured, ‘Error importing middleware %s: “%s”‘ % (mw_module, e)
    [Wed May 11 07:16:27 2011] [error] [client 187.5.49.62] ImproperlyConfigured: Error importing middleware django.middleware.csrf: “No module named csrf”
    [Wed May 11 09:16:27 2011] [error] [client 187.5.49.62] mod_mime_magic: invalid type 0 in mconvert().

    • victorjabur says:

      Sim, deve colocar também no wsgi. Estou realizando agora um estudo junto com o Leandro Mouta sobre qual é a melhor maneira de realizar a configuração para não ter que ficar colocando o siteadd em todos os scripts .py Dá uma lida neste link, estou lendo e é muito bom, talvez funcione sem precisar colocar esta maldita linha em lugar nenhum:
      Achei até agora dois links interessantes:

      http://www.doughellmann.com/PyMOTW/site/
      http://www.python.org/dev/peps/pep-0370/

      Obs.: No seu caso, ele está pegando a versão django da locaweb (antiga) e como o seu settings.py está usando recursos novos, ele não está encontrando isto: “django.middleware.csrf”. Deve resolver colocando no .wsgi também. Outra observação importante, qualquer alteração de código na locaweb deve-se realizar um “touch index.wsgi” para que o apache perceba que sua aplicação mudou e a atualize o mais rápido possível. Este touch apenas atualiza a data/hora de modificação do arquivo para a data corrente

      • fkrul says:

        Beleza, agora funcionou tudo, após uns 40 dias funcionou, nem acreditei quando apareceu a mensagem de erro do proprio Django, Muito obrigado pela atenção.

      • Mesmo colocando

        import site
        site.addsitedir(‘$HOME/.python/lib’)

        no index.wsgi continuo recebendo os mesmos erros do fkrul. Segui o artigo religiosamente, passo por passo, mesmo assim o sistema parece continuar usando o django da locaweb. Alguma idéia? Obrigada!

        • victorjabur says:

          Oi Aline,

          Leva um tempão até a locaweb enxergar as suas mudanças no index.wsgi. Para mim já chegou a levar umas 24 horas.
          Tenho quase certeza de que este seja o seu problema.

          Aguarde um pouco

      • Vitor. Já entendi.

        Invés de

        site.addsitedir(‘$HOME/.python/lib’)

        Precisa ser

        site.addsitedir(‘/path/do/meu/user/.python/lib’)

        Afinal o wsgi é executado como o usuário do apache e não como o usuário do projeto.

        • victorjabur says:

          Obrigado pelo comentário Aline.
          Já ajustei o post com as suas informações.
          É por isso que eu digo, é tão difícil ver mulheres em programação, mas as poucas que existem são competentes.
          Parabéns pela sagacidade.
          t+

  4. victorjabur says:

    Pessoal, acabei de atualizar o post, corrigindo com as devidas alterações dos testes que eu realizei aqui. Dêem uma olhada e qualquer dúvida e/ou melhoria fiquem à vontade para opinar.

    Abraços.
    Victor Jabur

  5. Peguei uma conta na Locaweb e parece que a versão 1.3 já é a padrão por lá. Pelo menos na minha conta quando mandei um django.get_version(), retornou “1.3”.

    Abraços!

  6. Show de bola. Funcionou perfeitamente. Acabei de atualizar pra 1.3.1.

    Abraço!

  7. Cara, desculpa fugir do assunto do seu post, mas como vc faz para o Django trabalhar corretamente com os arquivos estáticos na Locaweb?

    Criei um link simbólico em public_html/projeto/static apontando para a pasta wsgi_apps/projeto/static. Essa é a forma correta de fazer ou tem alguma outra forma?

    Abraços!

    • victorjabur says:

      Eu jogo tudo na pasta /media e cadastro isso no settings.py como url. Porque aí quem serve arquivos estáticos é o apache da locaweb, e não o Django. Em um ambiente de produção o Django nunca deve servir arquivos estáticos. A galera costuma usar o NGINX para esta tarefa também.

Leave a Reply

Leave a Reply