Qualquer pessoa que já trabalhou com Django entende a dor de cabeça que são os arquivos estáticos. Embora o staticfiles
pacote integrado seja ótimo, ele não funciona bem com CDNs como o S3 da Amazon. Depois de muito pouca escavação, pode-se encontrar django-storages
, mas a documentação é severamente insuficiente. Espero que isso ajude.
Nota: Presumo que você já esteja operando em um ambiente virtual.
Passos
Se você seguir essas seis etapas, estará servindo arquivos estáticos como um profissional!
Passo 1
Baixar django-storages
:
$ pip install django-storages boto
Passo 2
Adicione storages
aos seus aplicativos instalados em settings.py
.
INSTALLED_APPS = (
...
'storages',
...
)
etapa 3
Obtenha suas credenciais de segurança da AWS . Você precisará do ACCESS_KEY_ID
e do SECRET_ACCESS_KEY
. Salve-os para a Etapa 4.
Passo 4
Adicione as seguintes variáveis ao seu :settings.py
AWS_ACCESS_KEY_ID = 'your-access-key-id-from-step-3'
AWS_SECRET_ACCESS_KEY = 'your-secret-access-key-from-step-3'
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
E modifique as seguintes variáveis em :settings.py
STATIC_ROOT = os.path.join(SITE_ROOT, 'local_static')
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static'), # Assuming your static files are in a folder named ``static``
)
Verifique se você tem um diretório chamado local_static
e static
e que você importou os
.
Etapa 5
Adicione o seguinte em suas configurações de produção. Se você não tiver configurações separadas para desenvolvimento e produção, veja minha dica profissional sobre o assunto .
Em :settings.py
if os.environ.get('PRODUCTION', False):
AWS_STORAGE_BUCKET_NAME = 'static.mydomain.com'
DEFAULT_FILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = DEFAULT_FILES_STORAGE
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME
A AWS_S3_CUSTOM_DOMAIN
configuração é opcional. Se você nomear seu intervalo S3 , poderá criar um CNAME para o qual é um alias . Em seguida, você pode servir seus arquivos estáticos prontos para produção de seu próprio domínio!static.mydomain.com
static.mydomain.com
static.mydomain.com.s3.amazonaws.com
Etapa 6
Adicione os padrões de URL de arquivos estáticos.
Em urls.py
:
from django.conf.urls import patterns, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = patterns('',
... # Your patterns
)
urlpatterns += staticfiles_urlpatterns()
Resumo
Então, o que nós fizemos? Implementamos um método que pode ser usado para servir arquivos estáticos do servidor de desenvolvimento localmente e do servidor de produção usando o Amazon S3. Isso é ótimo porque temos acesso rápido aos nossos arquivos estáticos, por exemplo, * .html, * .css, * .js, durante o desenvolvimento; mas podemos atendê-los de um CDN para reduzir custos e melhorar o desempenho.
Além disso, podemos enviar quaisquer arquivos carregados pelos usuários diretamente para o CDN, o que é uma necessidade crítica ao usar certos PaaS, como o Heroku.