我想拆分前(Brunch)和后(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 app测试前端。目前部署过程如下所示:
backend/static/mydjangoapp
不太方便。有没有办法自动完成?我想我可以在后端更改静态路径以匹配前端或编写脚本来执行此操作。但它不是一个真正合适的解决方案,是吗?必须有一种方法可以直接从前端文件夹呈现 index.html ,并在不更改路径的情况下加载静态文件。试图谷歌,但没有运气。
答案 0 :(得分:0)
因此。我做了一些研究并找到了解决方案:
1)我在我的django应用程序前面使用了nginx服务器并将其配置为解析静态文件(nginx配置文件,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)
现在我需要做的就是运行该脚本。
答案 1 :(得分:0)
您可以使用post-brunch
或after-brunch
插件将文件从frontend/public
复制到您选择的django静态目录。
after-brunch的示例
exports.config = {
plugins: {
afterBrunch: [
'cp -r public ../backend/static'
// cp -r /from/frontend/path /to/backend/path
]
}
}
post-brunch的示例
exports.config = {
plugins: {
postBrunch: function(files) {
console.log("Run custom javascript code to copy files.")
}
}
}