5

Heroku で Django を実行しています。collectstatic を正常に実行できますが、サイトにアクセスすると、Django が静的ファイルを見つけられないことが明らかです。これが私の設定のスニペットです - 私はそれがほとんど標準的なものだと思います:

STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))


# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR, 'static'),
)

# List of finder classes that know how to find static files in
# various locations.
if CLAYS_ENV == 'dev':
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        'django.contrib.staticfiles.finders.DefaultStorageFinder',
    )

私の場合、CLAYS_ENV 変数は「dev」に設定されます。Django が collectstatic を正常に実行できるのに、後でファイルが見つからない理由についてのアイデアはありますか?

4

2 に答える 2

4

静的メディアの収集と静的メディアの提供は、2つの異なるものです。Collectstaticは、静的メディアをSTATIC_DIRS

静的ファイルの提供は、collectstaticコマンドではなくサーバーのプロセスです。これまでherokuにデプロイしたことはありませんが、静的アセットをその場所にマッピングするためのURLはありますか?

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

どのサーバーを使用していますか?ただし、通常は、サーバーでdjangoではなく静的メディアを提供する必要があります。apacheでは、これは設定することによって行われますAlias

于 2012-07-17T17:46:17.000 に答える
3

Heroku を使用する場合は、CDN (Amazon S3 など) を介して静的ファイルを提供することをお勧めします。これらを Heroku から直接処理することはできますが、動的要求に対応する同じプロセスが静的データも処理するため、処理時間が無駄になります。また、メディア ファイルの場合、Heroku のファイル システムは「一時的」であるため、CDN の使用が必須です。新しいコードをデプロイするたびに、Cedar スタックの新しいイメージが最初から再作成され、新しいコードのチェックアウトが行われます。作る。デプロイ間で作成された、Git で追跡されていないすべてのファイルは失われます。

于 2012-07-18T12:52:21.137 に答える