2016-03-25 39 views
1

フロント(Brunch)とバック(Django)を分割したいと考えています。私は、このフォルダ構造を持っている:(Django)フロントエンドとバックエンドを分割

backend 
    mydjangoapp 
    static 
    mydjangoapp 
     image 
     javascripts 
     stylesheets 
     index.html 

frontend 
    app 
    public 
    image 
    javascripts 
    stylesheets 
    index.html 

だから例えば、index.htmlをの内側にスタイルシートへのパスは次のようになります。

  • [バックエンド]static/mydjangoapp/stylesheets/app.css
  • [フロントエンド]/stylesheets/app.css

フロントエンドパスを使用して、フロントエンドをローカルでブランチサーバーでテストし、バックエンドパスをデプロイ時にdjangoアプリケーションでテストします。現在の手順を展開することは、次のようになります

  1. ブランチなどindex.htmlをapp.js内のすべてのパスがバックエンドに一致するようにbackend/static/mydjangoapp
  2. 変化にパブリックフォルダの
  3. 移動コンテンツを構築します 静的パス。

非常に便利ではありません。それを自動的に行う方法はありますか?私はフロントエンドと一致するようにバックエンドの静的パスを変更するか、それを行うためのスクリプトを書くことができたと思います。しかし、それは本当に適切な解決策ではありませんか? index.htmlを直接フロントエンドフォルダからレンダリングし、パスを変更せずに静的ファイルをロードする方法が必要です。 Googleにしようとしましたが、運はありません。

+0

after-brunch exports.config = { plugins: { afterBrunch: [ 'cp -r public ../backend/static' // cp -r /from/frontend/path /to/backend/path ] } }

例と

例あなたは、ファブリックを検討していますか?このプロセスを自動化するほとんどの展開スクリプトを作成することができます。私はステップ1と2を処理できると思う。 3の場合は、DEBUGがオンになっているかどうかをチェックするif文を含めることを検討してください。 – ubadub

+0

Thanks @ubadub、しかし、私はスクリプトを書く方が簡単だと思います。正確には私が探していたものではありません。 – Andrey

+1

* djangoなしで(ローカルまたは他の方法で)フロントエンドアプリケーション*を実行していますか?あなたはどんな種類のパスをjsなどに持っていますか? HTMLの場合、 'static-jade-brunch'のようなものを簡単に使用し、HTMLに '{{prefix}} stylesheets/app.css'を入れて、' static-jade-brunch'を '/'か ' 'static/mydjangoapp /'はENV変数などに依存します。 また、コンパイルしたファイルを '../backend/static/mydjangoapp'に直接置くようにBrunchを設定することもできます。 - https://github.com/brunch/brunch/blob/master/docs/config.md#paths –

答えて

0

So.私はいくつかの研究を行って、この溶液に来ました:私は私のDjangoアプリケーションの前にnginxサーバーを使用してそう(nginxの設定ファイルのような静的ファイルを解決するために、それを構成し

1)は、httpセクション):

server { 
    listen <%= ENV["PORT"] %>; 
    server_name _; 
    keepalive_timeout 5; 

    location/{ 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://app_server; 
    } 

    location ~* .*\/.+\..+$ { 
     root path/to/my/static/files; 
    } 
} 

スタティックパスは、フロントエンドと同じです。それらを変更する必要はありません。 Djangoアプリは静的ファイルをまったく解決しません。テンプレートをロードするだけです。

2)は、私がコンパイルしバックエンドするために必要なファイルをコピーするためにPythonスクリプトを書きました(それは)フロントエンドルートディレクトリに座っている:

#!/usr/bin/env python 

from subprocess import call 
import shutil 
import os 

BACKEND_FOLDER = "../backend/ui/public" 

call(["brunch", "build", "-p"]) 
shutil.rmtree(BACKEND_FOLDER) 
shutil.copytree("public", BACKEND_FOLDER) 

print ("Deployed to: " + BACKEND_FOLDER) 

を今私がする必要があることすべてをそのスクリプトを実行することです。

0

post-brunchまたはafter-brunchプラグインを使用して、ファイルをfrontend/publicから任意のdjango静的ディレクトリにコピーすることができます。post-brunch exports.config = { plugins: { postBrunch: function(files) { console.log("Run custom javascript code to copy files.") } } }

関連する問題