Heroku – 在Django应用程序中处理静态文件

我有一个项目(myapp)在heroku,但我不能让静态文件正常工作。 我正在关注这篇博文 。

我的Procfile如下所示:

 web: python myapp/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT myapp/settings.py 

settings.py

 ... STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles') STATIC_URL = '/static/' ADMIN_MEDIA_PREFIX = '/static/admin/' STATICFILES_DIRS = ( # I have the static folder inside my app and not inside the project os.path.join(PROJECT_PATH, 'cesar/static'), ) ... 

当使用heroku restart这是heroku logs显示的内容:

 ... Copying ... 114 static files copied to '/app/myapp/staticfiles'. ... 

但是当我做heroku run ls -l myapp/我看不到staticfiles文件夹:

 -rw------- 1 u5605 5605 0 Jan 28 16:53 __init__.py drwx------ 4 u5605 5605 4096 Jan 28 16:53 cesar -rw------- 1 u5605 5605 503 Jan 28 16:53 manage.py -rw------- 1 u5605 5605 6292 Jan 28 16:53 settings.py drwx------ 2 u5605 5605 4096 Jan 28 16:53 templates -rw------- 1 u5605 5605 257 Jan 28 16:53 urls.py -rw------- 1 u5605 5605 286 Jan 28 16:53 views.py 

我错过什么或做错了什么?

我find了解决scheme。 这是我最初的myapp/urls.py

 from django.conf.urls.defaults import patterns, include, url from django.contrib import admin from django.conf import settings admin.autodiscover() urlpatterns = patterns('', url(r'^$', include('myapp.cesar.urls')), url(r'^admin/', include(admin.site.urls)), ) 

我将这些行添加到原始myapp/urls.py文件的末尾:

 if not settings.DEBUG: urlpatterns += patterns('', (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), ) 

现在它工作正常。 我希望这也能帮助别人

在运行“./manage.py collectstatic”之前,可能应该手动创build在您的设置中指定的空STATIC_ROOT文件夹。