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

Post Atualizado em: 12 de Setembro de 2011

Olá para todos,

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

Advertisements

18 thoughts on “Atualizar versão do Django na Locaweb 1.3.1 – versão mais nova

  1. 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.

    1. 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.

      1. Nesse link o cara coloca no arquivo .wsgi. Será que assim também funciona na Locaweb? Porque no exemplo, ele explica como atualizar o Django na KingHost.

  2. 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().

    1. 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

      1. 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.

      2. 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!

      3. 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

      4. 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.

      5. 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+

  3. 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

  4. 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!

    1. Muito obrigado por me avisar !
      Mas acho que este post ainda continua válido, porque o Django está em constante desenvolvimento. Já saiu a versão 1.3.1.

  5. 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!

    1. 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

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s