web-dev-qa-db-ja.com

Heroku-Djangoアプリで静的ファイルを処理する

Herokuにプロジェクト(myapp)がありますが、静的ファイルを適切に機能させることができません。私はこれをフォローしていました ブログ投稿

私の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

何が欠けているか、間違っていますか?

35
César

解決策を見つけました。これは私の最初の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}),
    )

今では問題なく動いています。これが他の誰かにも役立つことを願っています

38
César

おそらく、「./ manage.py collectstatic」を実行する前に、設定で指定された空のSTATIC_ROOTフォルダーを手動で作成する必要があります。

0
machaku