1

開発サーバーで静的ファイルの提供に問題があります。以下のように構成しています。これは私のsettings.pyファイルにあります:

STATIC_URL = '/static/'
if socket.gethostname() == 'production_server':
  STATIC_ROOT = "/var/www/html/static/"
else:
  STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

これについていくつか興味深いことがわかりました。

  1. 本番サーバーではすべて正常に動作します。
  2. 開発サーバーでは、自分のファイルで 404 エラーが発生しますが、管理ファイルでは発生しません...

    http://localhost:8000/static/media/default.cssFailed to load resource: the server responded with a status of 404 (NOT FOUND)
    http://localhost:8000/static/media/javascript/pipe.jsFailed to load resource: the server responded with a status of 404 (NOT FOUND)
    http://localhost:8000/static/media/javascript/imdb_form.jsFailed to load resource: the server responded with a status of 404 (NOT FOUND)
    http://localhost:8000/static/media/pipe-img/wb-mpi-logo.pngFailed to load resource: the server responded with a status of 404 (NOT FOUND)
    http://localhost:8000/static/media/pipe-img/wb-mpi-logo-large.pngFailed to load resource: the server responded with a status of 404 (NOT FOUND)
    

...このテンプレートから...

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}media/default.css" media="screen"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/forms.css" />
<link rel="shortcut icon" href="{{ STATIC_URL }}media/pipe-img/favicon.ico" type="image/x-icon" />
<link rel="icon" href="{{ STATIC_URL }}media/pipe-img/favicon.ico" type="image/x-icon">
<script type="text/javascript" src="{% url 'django.views.i18n.javascript_catalog' %}"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/core.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.init.js"></script>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type="text/javascript" src="{{ STATIC_URL }}media/javascript/pipe.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}media/javascript/imdb_form.js"></script> <!-- FUTURE:  call from IMDB widget? -->

管理者以外の URL についてのみ不平を言っていることに注意してください。

最後に、./manage.py collectstatic を実行すると、アプリのメディア ファイルではなく、管理ファイルのみが STATIC_ROOT ディレクトリに収集されることにも気付きました。さらに、STATIC_ROOT ディレクトリを消去しても、管理リンクは機能します。

これらの 404 エラーを処理し、すべての静的ファイルを適切に提供するにはどうすればよいですか?

4

1 に答える 1

1

STATICFILES_DIRS変数を設定してsettings.py、静的アセットがある場所へのパスを含めます。./manage.py runserverこれにより、実行時にそれらが取り込まれるはずですDEBUG = True

また、環境変数を使用してタプルを拡張しますSTATICFILES_DIRS

if os.environ['deploy_type'] == 'prod':
    STATICFILES_DIRS += ("/var/www/html/static/",)
else:
    STATICFILES_DIRS += (os.path.join(PROJECT_DIR, 'static'),)

デプロイ プロセスの一部として環境変数を設定し、柔軟なデプロイ プロセスを支援できます。

ちょっとした接線で申し訳ありませんが、これがお役に立てば幸いです:)

于 2014-02-05T04:10:46.943 に答える