用 flask 如何做配置不同的子站比较优雅?

2016-08-01 15:54:17 +08:00
 LiuXuFei
数据库(不同子站前缀不同)一样,模板一样,其他也基本相同,只是有些配置不同,可以下不同的配置文件里。

目前有三个子站,未来随时可能增加子站,只是配置不同,用 flask 如何做比较优雅?
3268 次点击
所在节点    Python
12 条回复
honmaple
2016-08-01 16:16:15 +08:00
1.开三个 app
2.
a 配置
app.register_blueprint(site, subdomain='a')
b 配置
app.register_blueprint(site, subdomain='b')
c 配置
app.register_blueprint(site, subdomain='c')

site 是一样的,不知道这样行不行
awanabe
2016-08-01 16:20:22 +08:00
@honmaple blueprint 是不行的, 要写属于自己蓝图的 route 。同样的方法名还会报错呢


配置不同这种东西, 就是复制一份, 改配置,上线。
最好就是做一个 generator ,一句命令生成所有相同的结构, 再把 config 丢进去就好了
LiuXuFei
2016-08-01 16:22:41 +08:00
@honmaple

目前我就是用这种方式,但是没用子域名

app.register_blueprint(site, url_prefix='/aaa')
app.register_blueprint(site, url_prefix='/bbb')
app.register_blueprint(site, url_prefix='/ccc')

我刚入 python 的坑。
但是还不懂如何只使用一个 models 文件,和调用不同的配置文件。
LiuXuFei
2016-08-01 16:25:51 +08:00
@awanabe 就是不想做复制,只用一份代码,增加配置文件就可以上线,也不需要子域名。
honmaple
2016-08-01 16:26:26 +08:00
@awanabe 谢谢提醒,blueprint 这块现在想想的确是不行的,templates 上的 url_for 不同
LiuXuFei
2016-08-01 16:36:28 +08:00
@honmaple url_for('.index') 这样写就行了吧
honmaple
2016-08-01 16:44:06 +08:00
@LiuXuFei 不对啊,我试了一下,url_for('.index')只能得到 url_prefix='/aaa'的 url,输入 /bbb 会重定向到 /aaa
honmaple
2016-08-01 16:46:41 +08:00
@LiuXuFei 我目前想到的办法是用 g 保存,url_for(g.prefix + '.index')
LiuXuFei
2016-08-01 16:46:55 +08:00
@honmaple 我刚也试了,你说的对,不好意思
gevin
2016-08-01 20:23:29 +08:00
做成 docker image ,分别拉起三个实例就可以
serial
2016-08-01 21:11:40 +08:00
从最基本的思想就是错误的。一旦作为站点,就应该算作一个独立的资源。一个资源中套其他资源,天长日久,你的代码完全没有可维护。

每个站点有一份代码拷贝,和一个独立的 conf 配置文件(该站点的 Ip 、 port 、...)。使用 Nginx 作为前端代理,接入后端的多个子站。

编写一个自动化脚本,部署各个子站。
LiuXuFei
2016-08-04 09:57:23 +08:00
@gevin
@serial 谢谢,某些原因不想这么使用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX