subir postgres deploy application django heroku

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.