2013-10-16 5 views
5

나는 Heroku docs on Django and Static Assets 공식을 추적했습니다. 나는 dj-static를 설치하고 내 requirements.txt 파일에 추가, 제대로 내 settings.py 파일에있는 모든 변수를 구성한 :Heroku에 내 장고 앱을 배포 할 때 collectstatic이 자동으로 실행되지 않는 이유는 무엇입니까?

STATIC_ROOT = os.path.join(CONFIG_ROOT, 'served/static/')      
STATIC_URL = '/static/'               

STATICFILES_DIRS = (               
    os.path.join(CONFIG_ROOT, 'static'),           
) 

을 그리고 이것은 내 wsgi.py 같은 모습입니다 : Procfile

import os                  
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_django_project.settings")                 

from django.core.wsgi import get_wsgi_application 
from dj_static import Cling 
application = Cling(get_wsgi_application()) 

내용을 :

web: gunicorn --bind 0.0.0.0:$PORT my_django_project.wsgi:application 

docs에서 "collectstatic은 자동으로 실행됩니다. 제대로 구성되었습니다. " 하지만 내 사이트를 탐색 할 때 명확하게 CSS가 없습니다.

heroku run을 사용하여 debugging을 시도했지만 예상대로 정적 파일을 복사합니다.

나는 예상대로 작동 내 Procfile에서 collectstatic 명령, 즉

web: python my_django_project/manage.py collectstatic --noinput ; gunicorn -b 0.0.0.0:$PORT my_django_project.wsgi:application 

을 ... 포함, 때 정적 파일이 제공되는 것으로 나타났습니다.

그러나 이상한 점은 heroku run bash을 실행하고 STATIC_ROOT이 가리키는 디렉토리를 보면 거기에 아무 것도 없다는 것입니다. 실제로 전체 served/ 디렉토리가 누락되었지만 정적 파일은 여전히 ​​제공됩니다!

나는 왜 collectstatic이 자동으로 실행되고 있는지 알고 싶습니다. - 문서에서 언급 한 것처럼 - 나는 장고 앱을 Heroku에 배포합니다.

+0

확인하기 http://stackoverflow.com/a/15858757/263989 – fasouto

+0

@fasouto 시도해 보았습니다. 어떤 오류도 발생하지 않았습니다. 나는''Copy ... ''와'284 static files copied.'라는 메시지를 마지막에 보냈습니다. – 3cheesewheel

답변

4

Heroku/production에 특정 설정 모듈을 사용하고있는 것 같습니다. 또한 환경 변수 DJANGO_SETTINGS_MODULE을이 설정 모듈을 가리 키도록 설정했습니다 (앱이 실행될 때 Django는 기본/개발 키트가 아니라 해당 모듈을 사용한다는 것을 알고 있습니다). 마지막으로 아마 Heroku/production 설정 모듈 (아마도 STATIC_ROOT)에 정적 자산 설정을 구성했을 것입니다. heroku 환경 변수는 서브 타임에만 설정되며 컴파일시에는 설정되지 않습니다.. 이는 중요하므로 collectstatic은 헤로 쿠의 컴파일시 작업입니다. (Heroku는 2 단계로 진행합니다 : 1) 응용 프로그램을 설정하는 것 (collectstatic, syncdb 등) 2) 서빙, 응용 프로그램의 정상 작동)을 포함하는 컴파일.

기본적으로 모든 것을 올바르게 수행했지만 Heroku는 사용자의 환경 설정 변수 (예 : 다른 설정 모듈 사양)를 collectstatic으로 노출하지 않았습니다.

는 다음과 같이 Heroku가의 user-env-compile 실험실 기능을 활성화, 환경 변수는 컴파일 시간을 설정해야합니다 :

heroku labs:enable user-env-compile 

을 나는이 기본적으로 할 수있는 어리석은 일이라고 생각하는 이유 Heroku가 청각에 관심이있을 것 좋은 생각이라고 생각 했어.

+0

FYI 더 이상 유효한 해결책이 아닙니다. (http://stackoverflow.com/questions/22904959/failing-to-enable-user-env-compile-on-heroku – andy

1

heroku 설정에 user_env_compile 설정을 추가 했습니까? 그와

heroku labs:enable user-env-compile

은 자동에게 Heroku에 배포 할 때마다 collectstatic가 실행해야 사용 가능.

1

도크와 함께 heroku python buildpack을 사용하고 있으며 권한을 실행했기 때문에 collectstatic이 실행되지 않았습니다. 그들은 recent commit (2013 년 12 월 13 일)에 수정 했으므로 이제는 작동합니다.