postgres - Django heroku directorio estático
postgres heroku python (3)
El problema es que la ruta absoluta que está utilizando para STATIC_ROOT
no se encuentra en el servidor Heroku.
Para resolverlo, considere el siguiente enfoque.
En su settings.py:
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
STATIC_ROOT= os.path.join(PROJECT_DIR,''staticfiles/'')
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT,''static/''),
)
Soy nuevo en heroku y probé una aplicación django simple sin css.
Pero acabo de agregar un archivo css en mi aplicación y cuando hago esto:
git push heroku master
La colección de archivos estáticos falla:
[...]
-----> Collecting static files
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 163, in handle_noargs
collected = self.collect()
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 104, in collect
for path, storage in finder.list(self.ignore_patterns):
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/finders.py", line 105, in list
for path in utils.get_files(storage, ignore_patterns):
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/utils.py", line 25, in get_files
directories, files = storage.listdir(location)
File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/files/storage.py", line 235, in listdir
for entry in os.listdir(path):
OSError: [Errno 2] No such file or directory: ''/home/kevin/web/django/appheroku/blogapp/static''
! Heroku push rejected, failed to compile Python/django app
To [email protected]:[...]
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ''[email protected]:[...]''
Aquí está mi settings.py:
[...]
STATIC_ROOT = ''/home/kevin/web/django/appheroku/staticfiles''
STATIC_URL = ''/static/''
STATICFILES_DIRS = (
''/home/kevin/web/django/appheroku/blogapp/static'',
)
[...]
El urls.py:
[...]
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
Procfile
web: python appheroku/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT appheroku/monblog/settings.py
Parece que incluso el directorio ''/ home / kevin / web / django / appheroku / blogapp / static'' existe, no se detecta y no puedo entender por qué. :(
Por favor ayúdame ^^
EDITAR:
Ahora mi settings.py se ve así:
import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
PROJECT_DIR = os.path.join(PROJECT_ROOT,''../blogapp'')
[...]
STATIC_ROOT = os.path.join(PROJECT_ROOT,''staticfiles/'')
STATIC_URL = ''/static/''
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR,''static/''),
)
[...]
Y ahora el paso de recopilación de archivos estáticos parece funcionar bien:
-----> Collecting static files
74 static files copied.
Hubo otro problema: en mi archivo proc, no se encontraron ''appheroku / manage.py'', ''bin / gunicorn_django'' y ''appheroku / monblog / settings.py''. Lo arreglé y ahora mi archivo se ve así:
web: python manage.py collectstatic --noinput; gunicorn_django --workers=4 --bind=0.0.0.0:$PORT monblog.settings
La aplicación no se bloquea más, pero todavía no hay css. Aquí está el registro:
''2012-05-31T17:35:16+00:00 heroku[router]: GET xxxx-xxxx-number.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=85ms status=200 bytes=1054
2012-05-31T17:35:17+00:00 heroku[router]: GET xxxx-xxxx-number.herokuapp.com/static/css/style.css dyno=web.1 queue=0 wait=0ms service=5ms status=404 bytes=2088
2012-05-31T17:35:17+00:00 heroku[router]: GET xxxx-xxxx-number.herokuapp.com/static/js/jquery-1.7.2.min.js dyno=web.1 queue=0 wait=0ms service=5ms status=404 bytes=2115''
EDIT3:
Si si funciona ^^ El problema estaba en mi urls.py. Escribí :
[...]
if not settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
en lugar de
[...]
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
El error no estaba en mi mensaje ... Sí, fue muy difícil ayudarme. (Lo siento) Me siento tan estúpido ^^ ''
Estás en tu camino. Lo que está sucediendo es que Heroku está tratando de usar su configuración STATICFILES_DIRS (/ home / kevin / web / django / appheroku / blogapp / static) que existe localmente en su máquina pero no existe en el servidor Heroku.
Una solución simple es eliminar esa línea de la variable staticfiles_dir para que tenga:
STATICFILES_DIRS = ()
Luego, su STATICFILES_FINDERS predeterminado se activará y debería ser bueno para ejecutar la aplicación tanto localmente como implementada en Heroku.
Para cualquiera que venga como yo:
Como @eliotk implica,
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
STATIC_ROOT= os.path.join(PROJECT_DIR,''staticfiles/'')
STATICFILES_DIRS = ()
Esta es la configuración que desea evitar FileNotFoundError: [Errno 2] No such file or directory:
errores o OSError: [Errno 30] Read-only file system:
errores.