2016-07-07 8 views
2

を解決していない、私は/my_app/から私のDjangoのアプリを提供するためにnginxのを使用しています:、dev内のサブフォルダからDjangoのサービング:静的ファイルだから

location /my_app/ { proxy_pass http://127.0.0.1:8000/; }

そして私はその後STATIC_URL = '/my_app/static

を持っていますdjango管理者を使用する場合、/my_app/static/admin/css/base.cssへのリクエストはstatic/admin/css/base.cssに解決されます。したがって、静的ファイルと一致しません(djangoは接頭辞として/my_app/static/...を想定しているため)。

だから、私の解決策は、(devに)、私自身の「静的なファイルサービス」を介して静的ファイルを提供することです:

] + static('/static/', document_root=settings.STATIC_ROOT) 

しかし、私は私のSTATIC_ROOTが空であるので、(私は考えていたいくつかのクレイジーTypeError at /static/admin/css/base.cssを取得devにはSTATIC_ROOTを使うべきです)。 STATIC_ROOTを何かに設定しても、それは解決されません(動的に解決するのではなく、静的なディレクトリから実際にサービスを提供しようとしているように見えます)。

Sooo、私のdjangoアプリをサブフォルダから提供するにはどうすればdevに動的に静的ファイルを提供するのですか?

EDIT:でもFORCE_SCRIPT_NAME = '/my_app/と、それは働いていないともDjangoの管理のリンクがあまりにも間違っているが、それは

EDIT 2予想されます:Djangoの1.10ので、管理者リンクが正しくなりました(SCRIPT_NAMEを尊重):https://docs.djangoproject.com/en/1.10/releases/1.10/#django-contrib-admin

答えて

0

Nginxで静的ファイルを提供しているように見えません。プロキシパスは、djangoドメインへのリクエストを受け取り、バックエンドの何かにそれらを渡しています - あなたは基本アプリケーションを提供するために何を使用していますか?これはrunserver以外のものだと仮定します(これをしないでください!)、gunicorn/uwsgiは静的ファイルではなくdjangoアプリケーションを提供します。 Nginxは通常、ジャンゴの要求をGunicornなどに渡し、静的ファイルを提供します。

Nginxの基本設定は次のようになります。

server { 
     server_name mydomain.com www.mydomain.com; 

     access_log off; 

     location /static/ { 
      alias /var/www/mydomain.com/static/; 
     } 

     location/{ 
       proxy_pass http://127.0.0.1:8081; 
       proxy_set_header X-Forwarded-Host $server_name; 
       proxy_set_header X-Real-IP $remote_addr; 
       add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; 
     } 
    } 

ファイルパスをPythonでビルドして、ハードコードされていないようにすることをお勧めします。それを設定する際の初期のオーバーヘッドのために、多くの柔軟性が得られます。シェルに移動してそれらをインポートすることで、これらの解決箇所を確認できます。

静的settings.pyの設定(実際common.py、その効果は同じである)は、次いで、上記の例で

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
STATICFILES_DIRS = [os.path.join(PROJECT_DIR, 'static'),] 
BASE_DIR = os.path.dirname(PROJECT_DIR) 
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
STATIC_URL = '/static/' 

は、プロジェクトルートは明らかに/の/ var/WWWに座っmydomain.com。これらの設定は、dev/localとproductionの両方で機能します。

+0

私の目標は、開発サーバーでアプリケーションを提供することです。なぜなら、nginxの完全な統合で開発者をしたいからです。あなたの設定では、あなたはルートから直接アクセスしているので、あなたがデフォルトの '/ static /' URLを使用しているのは簡単です。だから、私の場合はそれほど役に立ちませんが、ありがとうございます。 – damio

関連する問題