配置( c) : 设置报告成功, 即使写入 env 文件失败
当 dokku 保存一个应用程序的配置时,它会写出 env 文件,然后忽略此写入是否实际有效. 如果写入失败, 命令仍然打印出“ 设置配置 vars ” , 仍然启动更新触发器, 仍然重新启动应用程序, 并且仍然退出 0 。 没有东西告诉你这个配置没有保存。
这在插件/配置/配置.go'-SetMany' (第58行)、UnsetMany' (第94行)和UnsetAll' (第121行)三个地方发生。 这三个人都称`env.Write ()'为赤裸裸的陈述并放弃返回的错误。 常识 在得到同样的治疗后立即拨打。
开始 env.write () 数据 common. etPermissions( common. etPermission Input{ ) (英语). 文件名: env.Filename (,), 模式: os.FileMode( 0600), ) (中文(简体) ). 触发 Update( appName, “ set”, 密钥)
`Env.Write()'确实可能失败。 除了通常的磁盘和许可问题外,当“Env”后面没有文件时,它立即返回一个错误:
开始
func (e *Env) 写入() 错误{
如果e. filename == "" {
返回错误。 新建( “ 此信封被创建为未绑定的文件 ” )
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
返回 godotenv. Write( e.Map (), e. filename) 。
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?LoadMergedAppEnv ' 将filename'空白出,因此,任何最终写出一个合并的字条的字条都占据了该分行。
我是如何发现的:我在追踪一个插件为什么叫“配置”。 SetMany " 似乎已经奏效,但没有效果。 在这种情况下,写作本身确实取得了成功——它走在了0.38前的`DOKKU ROOT//ENV'路径上,我这边不是这里,而是这里。 所以这个问题不是原因。 在追踪中突出的是,一个真正失败的写法会产生完全相同的输出:"Setting config vars"一行,变量回放,以及一个零出站码.
确定的方法应该是从env.Write ()'返回错误,而不是放弃错误,因此,打电话者和CLI可以大声地失败。 特遣人员 ' 可能也值得处理.
内容来源: dokku/dokku