本地环境没问题,线上新安装的面板,却无法创建数据库(其实是创建没有成功,但是却还显式出来)
看了一下源码,1.3的管理器有bug,原因是,错误的判断了监听地址,导致数据库执行了重启
这里就拼的是数据库restart的速度,速度快的,就能创建成功,速度慢的,就创建失败,所以这可能就是官方之前无法复现的原因吧
关键代码在pgsql_manager_main.py 115行
- if listen_ip.strip() not in ["'127.0.0.1'", "'localhost'"]:
- self.sed_conf("listen_addresses", "'*'") # 修改监听所有地址
- public.ExecShell("/etc/init.d/pgsql restart")
复制代码
而管理器模板中确实这样定义本地地址,而且上面的地址还多了单引号
- <select name="listen_ip" class="bt-input-text mr5" style="width:100px">\
- <option value="127.0.0.1/32">本地服务器</option>\
- <option value="0.0.0.0/0">所有人</option>\
- <option value="ip">指定网段</option>\
- </select>\
复制代码 官方的开发兄弟太大意了
解决办法:搜索
- if listen_ip.strip() not in ["'127.0.0.1'", "'localhost'"]:
复制代码
改成
- if listen_ip.strip() not in ["127.0.0.1/32","127.0.0.1", "localhost"]:
复制代码
这样就不会进入restart 导致创建数据库和用户失败
- public.ExecShell("/etc/init.d/pgsql restart")
复制代码
其实这里也还是不合理,如果创建的时候就定义了监听指定网段或所有人,那么还是会重启。
是不是应该改成这样?(未测试)
- public.ExecShell("/etc/init.d/pgsql reload")
复制代码
|
|