提出问题
在我部署flask项目至服务器中,准备用uwsgi+Nginx代理时发现一个现象很折磨人:你在服务器运行flask run或者是flask run --host 0.0.0.0时,项目里是已经没有有问题的了,但你在配置好uwsgi.ini与创建了uwsgi相关配置文件之后,使用了uwsgi --ini uwsgi.ini ,又在nginx配置代理文件中使用了
location / {
include uwsgi_params;
uwsgi_pass unix:项目/uwsgi/uwsgi.sock;
}
准备的万无一失之后,就会发现原本能成功运行的网站项目在经过代理之后其CSS、JS等静态文件没有对网站进行渲染,还有些图片也加载不出来(当时最折磨的就是,我放在同一路径下的图片,为啥有的能够加载出来有的却不行),我寻了整整一天,还是没能找到能够解决我的问题的方法。网上的解决办法五花八门,到现在我都还清晰的记得有这些(这些方法对我来说都没有用):
提出没有丝毫作用的解决办法
修改Nginx配置文件
在配置文件中添加下面这个:
location /static {
alias /home/sydney/ecocathlon/static; # alias 后面指的是静态文件的绝对路径
}
或:
location /static {
root /home/sydney/ecocathlon;# root 后面指的是静态文件的绝对路径的上一级
}
这两种是一样的,运行之后效果相同。
或是在给flask应用命名时给定static的静态路径
app = Flask(__name__,static_url_path='路径',static_folder="路径")
具体是什么路径可以自己去搜
3、修改nginx.conf
在nginx.conf 文件http里面将配置#include /etc/nginx/mime.types;前的#去掉
首先如何找到nginx.conf 文件
find / -name nginx.conf
得到路径后直接cd过去
但我最后发现我的nginx.conf文件中的mine.types只有一行,而且没有#,所以说这个解决办法真的很鸡肋。
真正实用的解决办法——终极
我尝试过很多方法,妄图找到解决办法,网上也没有很彻底的解决办法,前一天晚上0点,我都还在比较能加载出来的图片与不能加载出来的路径,能加载出来就是能加载出来,不能加载出来就直接给你个404,那天晚上我找解决办法找到1点,没找到,痛苦入睡——为什么网上没有人彻底的说明这个问题啊,直到第二天早上我八点起来,我想着既然部署不出来,那就算了吧,把以前的项目布置回去,正当我布置回去,修改完项目目录之后,也就是下面这两个。

我就在那改目录改着玩,看看会发生什么,结果发现,在我修改的那几次中,也出现了没加载静态文件的情况,心想着不应该啊,明明之前都可以加载出来,后来我就突然悟了,这个网站目录是用来给访问路径权限的。我将网站目录设置成static的上一级目录后网站静态文件全部都能加载出来了。
总结
当你的static所属路径不在你的项目路径的子路径的时候(像我的一样):

你部署网站也会下意识的将网站目录设置成你的项目所在路径,这就会导致你代理之后的网站没有权限访问static文件夹,也就会发生部分静态文件加载不出来的情况(为什么部分能加载出来这个问题我也不清楚),反正把你的这个网站目录改成static的上一级目录就对了

上述3种方法未成功解决说明
1、2两种方法:在app应用出生的那个文件夹,就已经默认了templates与static路径,只要你老老实实把他们两个放在app.root_path同级目录中,flask静态文件就绝不会出问题,也就不需要修改任何参数了,而且都说了是flask部署时没有问题,nginx代理时出问题了,说明静态文件路径是不用特地注明了,关键点也不在这。
3我不想说,除了有人会在某些项目中将那行给注释掉,不然这文件里的那行本来就没有#,所以不要自己手贱去把默认文件给注释了。