将Flask部署在子目录中


发布于

|

分类

和前几篇工作一样,都是同一个项目里面遇到的坑…… A.K.A,给Flask 应用加一个全局前缀。

由于一些原因,我不能将自己的Flask项目部署到根目录里,只能子目录部署。

本来是个比较简单的事儿:flask的 app 用个BluePrint包一下就行了啊……但是我不想写得那么入侵,就在找有啥比较「不入侵」的方法。

我的项目是用gunirorn启动的。gunicorn支持一个叫 SCRIPT_NAME 的环境变量。比如,你的网站域名是 abc.com ,想然后设置了 SCRIPT_NAMEdef,然后访问 abc.com/def/123 那么gunicorn会将 def 认为是 SCRIPT_NAME ,处理的时候会将 SCRIPT_NAME 给干掉,剩下 123 传给Flask。或者说,相当于自己做了nginx的 rewrite ^/SCRIPT_NAME/(.*)$ /$1 break

所以解决办法是:

  1. 【和下面的2二选一】 部署的时候,设置 SCRIPT_NAME 环境变量为你想要的全局前缀,例如 SCRIPT_NAME=/some_prefix
  2. 【和上面的1二选一】nginx设置 uwsgi_param SCRIPT_NAME /some_prefix
  3. 去掉nginx的 rewrite ^/some_prefix/(.*)$ /$1 break 设置

嗯,就这样。

当然,也被坑过……见Twitter:

被内部轮子折磨一周……
想把flask部署在子目录里。内部🐲🦄️死活用不了script_name这个环境变量。查了一周了都没啥进展(查flask代码、nginx啥的)。最后灵光一闪,🐲🦄️是g🦄️的轻量包装,那么直接用g🦄️?
emmm,成功了

然后最后部署的时候,海外可以部署成功,国内死活部署不了……

成吧……就这样吧……先用Trick顶上了。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注