Quem sou eu

Minha foto

Formado em Computação, desenvolvedor web, interessado em tecnologia, metaleiro e um gamer inveterado.

Pesquisar

sexta-feira, 9 de junho de 2017

Como pegar o ID do último commit no GIT para forçar atualização de arquivos

Normalmente os navegadores modernos fazem cache dos arquivos para diminuir banda utilizada e aumentar o desempenho.

Isso é sempre uma boa, a não ser quando vc precisa forçá-lo a atualizar, principalmente quando alguma mudança é feita em CSS e JS.

No mobile ainda é mais custoso, haja visto que muitos usuários não sabem como limpar o cache e forçar o recarregamento.

Para isso, podemos "mudar" a url do arquivo com cache, para forçá-lo a atualizar e com isso obtermos o resultado desejado.

No seu arquivo de tags, inclua a simple_tag abaixo:

@register.simple_tag
def git_ver():
    '''
    Retrieve and return the latest git commit hash ID and tag as a dict.
    '''
    import os, subprocess
    from django.conf import settings

    git_dir = os.path.dirname(settings.PROJECT_PATH)

    try:
        # Date and hash ID
        head = subprocess.Popen(
            "git --git-dir={dir}/.git rev-parse HEAD".format(dir=git_dir),
            shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        version = head.stdout.readline().strip().decode('utf-8')
        git_string = "{v}".format(v=version)
    except:
        git_string = u'unknown'

    return git_string


E no seu template:

{% load site_tags %}
<link href="styles.css?v={% git_ver %}" rel="stylesheet">

hasta!

sexta-feira, 5 de maio de 2017

'Settings' object has no attribute 'TEMPLATE_DEBUG'

Para quem atualizou a versão do Django para 1.11 e utiliza a sorl-thumbnail, a versão disponível desse plugin no PyPI ainda não contempla a setting TEMPLATE como um dicionário, ocasionando o erro do título deste post pela falta da setting TEMPLATE_DEBUG.

Caso opte por colocar no arquivo settings.py a setting obsoleta, será gerado o warning abaixo:


?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DEBUG.

A solução (provisória) é instalar a Sorl direto do github onde este problema foi resolvido até que ela seja atualizada no PyPI.


Execute comando abaixo para a instalação:

pip install -e git+https://github.com/mariocesar/sorl-thumbnail.git#egg=sorl-thumbnail

O comando acima irá desinstalar a versão que ainda apresenta este problema e baixará a versão presente no git.

Atualize também seu arquivo requirements.txt com o comando acima (sem o pip install) para usar em produção.

hasta!

segunda-feira, 10 de abril de 2017

from django.utils.importlib import import_module - Django 1.9.X

O erro:

from django.utils.importlib import import_module

ImportError: No module named importlib

Para resolver edite o arquivo que está gerando o erro, no meu caso django-1.9.12/lib/python2.7/site-packages/sorl/thumbnail/helpers.py substitua:

Isto
from django.utils.importlib import import_module

Por:
from importlib import import_module

hasta!