这是一个非常核心的问题。我有一个在 nginx/gunicorn 配置中运行的 django 应用程序。Nginx 负责代理到gunicorn,但也直接服务于项目的静态文件。
问题是,当我更新静态文件时,浏览器不会加载最新版本。有时刷新会修复它,但有时它需要清除缓存。(我应该提到我正在使用 require.js,这没有帮助)。
为了缓解这个问题,我正在做这个技巧:
VERSION = '2.03'
STATIC_URL = '/static/' + VERSION + '/'
STATIC_ROOT = BASE_DIR + '/static/' + VERSION + '/'
Run Code Online (Sandbox Code Playgroud)
这样,当我更改静态文件时,我只需修改版本。但出于各种原因,我需要停止这样做。有没有办法配置 nginx 以便在可用时更好地提供更新的静态文件?
我只是不确定浏览器或 nginx 是否应该受到指责。
更新:这是我的 nginx 配置,删除了注释:
upstream mycoolsite_server {
server unix:/webapps/mycoolsite/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name www.mycoolsite.com;
return 301 http://mycoolsite.com$request_uri;
}
server {
listen 80;
server_name mycoolsite.com 42.42.42.42;
client_max_body_size 4G;
access_log /webapps/mycoolsite/logs/nginx-access.log;
error_log /webapps/mycoolsite/logs/nginx-error.log;
location /static/ {
alias /webapps/mycoolsite/site/static/;
}
location /media/ {
alias /webapps/mycoolsite/site/media/;
} …Run Code Online (Sandbox Code Playgroud) 我有这个config.toml:
baseURL = "https://my-username.github.io/blog/"
Run Code Online (Sandbox Code Playgroud)
并且有一个静态文件在static/img/foo.png.
现在,在content/posts/bar.md,我有以下内容:
---
title: "Bar"
---

Run Code Online (Sandbox Code Playgroud)
启动后图片没有显示hugo server,所以我检查了元素,发现 Hugo 为它生成了以下 URL:
http://localhost:1313/blog/posts/bar/img/hireme.png
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的;它应该是
http://localhost:1313/blog/img/hireme.png
Run Code Online (Sandbox Code Playgroud)
当我使用 时,图片显示正确,但是这很奇怪:/blog/是 的一部分baseURL,为什么我需要再次输入?
如果我有一个具有以下文件夹结构的 nodejs express 应用程序:
-src
- client
- public
- css
- js
- ...
- views
- server
- server.js
aboveindex.js 根位置?app.use(express.static();
看起来像?
- - 更新 - -
通过使用解决了这个问题: app.use(express.static(path.join(__dirname, '/../client/public')));
javascript model-view-controller static-files node.js express
当我尝试使用Staticfile Buildpack访问托管在 Cloud Foundry 上的 JavaScript 文件时,我的浏览器拒绝加载它并在控制台中显示一条错误消息:
CORS 策略已阻止从源 '...' 访问 '...' 处的脚本:请求的资源上不存在 'Access-Control-Allow-Origin' 标头
如何在 Cloud Foundry Staticfile Buildpack 中配置跨域资源共享 (CORS)?
我有以下代码块,其中.css返回相应的文件路径。
它是Theme-Class允许用户通过配置文件视图中的按钮更改网站主题(深色和浅色)的一部分。
def link(self) -> str:
"""
Returns the link where the CSS file for this theme is located
"""
return static('app_shared/colors_%s.css' % self.name())
Run Code Online (Sandbox Code Playgroud)
当它发生在 HTML-Template 中时,同样的问题可以通过更改{% load staticfiles %}为{% load static %}. 显然,对于源代码,我需要另一种选择。
我有Backbone驱动的单页应用程序.应用程序包含几个文件:
index.html
javascripts/app.js
javascripts/vendor.js
stylesheets/app.css
images/ -> image assets
Run Code Online (Sandbox Code Playgroud)
我想为prerender.io我的应用添加服务,使其对SEO友好.对我这样做最简单的方法是使用express.js托管heroku:
var express = require('express');
var app = express();
app.use(require('prerender-node').set('prerenderToken', 'YOUR_TOKEN'));
// ...
app.listen(process.env.PORT || 5000);
Run Code Online (Sandbox Code Playgroud)
但也许express或实际上node不是最好的服务静态文件?也许heroku不是最好的服务静态文件?什么是最好的解决方案?您有什么推荐的吗?
我通过将其原始名称重命名为来保存用户上传userID + '_' + new Date().getTime() + fileExt.我将文件属性存储在mongodb集合中:
{
name : String //generated name
, originalName : String //its original name
...
}
Run Code Online (Sandbox Code Playgroud)
现在当用户请求下载文件时,我必须向用户提供文件的原始名称(在db中保存,因此没有问题).
对于以下请求
GET /users/:userId/uploads/:fileId?type=download
我有这个处理程序
//the mongoose query
UserUpload.findById(req.params.fileId).exec(function(err, doc){
var fileLocation = __dirname + '/public/uploads/users/' + req.params.userId + '/' + doc.name;
if(req.query.type && req.query.type == 'download') {
// I don't know what should I do now
// Downloader.download(fileLocation, newName);
}
});
Run Code Online (Sandbox Code Playgroud)
我刚刚尝试制作SPA,但我无法解决index.html依赖关系(比如包括相关的css,js文件).所有js和css文件都无法加载到浏览器中并404在开发控制台中显示错误.
/root
|
|__public
| ??? spa
| ??? controllers
| ??? css
| ??? html
| ??? js-self
| ??? js-vendor
| ??? services
|_____________ index.html
Run Code Online (Sandbox Code Playgroud)
路线申报
var assets = function(){
return {
method: 'GET',
path: '/{param*}',
handler: {
directory :{
path : 'public',
index: false
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有路线的顺序
info: ================Registered routes=============
info: Route: GET /employee
info: Route: POST /employee
info: Route: PUT /employee
info: Route: DELETE /employee
info: Route: POST /signin
info: Route: POST …Run Code Online (Sandbox Code Playgroud) 将我的django模板放在静态目录中是一个好习惯吗?
无论如何,collectstatic都会将我的所有模板文件复制到静态目录中.为什么不直接将静态文件放在静态目录中?
我试图在django项目中找到所有引导文件只在一个文件夹中并引用它们.为了做到这一点,我已经将这些行添加到setting.py:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Run Code Online (Sandbox Code Playgroud)
我的base.html看起来像这样:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Muplay</title>
<link rel="stylesheet" type="text/css" href="{% static'css/bootstrap.css' %}">
<script src="{% static 'js/bootstrap.js' %}"></script>
</head>
<body style="background-color: #F2F2F5">
{% include 'snippets/nav.html' %}
<div class="container">
{% block content %}{% endblock %}
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我将此base.html扩展到其他html文件时,css和js文件在浏览器中成功加载.但是,问题是,在终端中,django返回404错误如下:
[10/Dec/2017 14:03:27] "GET /static/js/bootstrap.js HTTP/1.1" 404 1759
[10/Dec/2017 14:03:27] "GET /static/css/bootstrap.css HTTP/1.1" 404 1765
Run Code Online (Sandbox Code Playgroud)
为什么django会在浏览器中成功加载这些静态文件时返回404代码?
static-files ×10
node.js ×4
django ×3
express ×2
python ×2
bootstrap-4 ×1
cors ×1
django-1.11 ×1
django-3.0 ×1
download ×1
gunicorn ×1
hapijs ×1
hugo ×1
javascript ×1
nginx ×1
seo ×1
templates ×1
url ×1