在我们的NaviServer/OpenACS实例中,我们经常会遇到以下错误。重新启动后,错误消失了,但会再次出现(在我还不理解的情况下)。在我看来,似乎某些代码会弄乱clock.tcl实现使用/看到的消息目录或区域设置。但是,我不确定如何才能调试得最好。
expected integer but got "GREGORIAN_CHANGE_DATE"
while executing
"GetDateFields $clockval $TZData($timezone) GREGORIAN_CHANGE_DATE"
(procedure "::tcl::clock::formatproc'%Y-%m-%dT%H\:%M\:%SZ'c" line 4)
invoked from within
"$procName $clockval $timezone"
(procedure "::tcl::clock::format" line 34)
invoked from within
"clock format [clock seconds] -timezone :UTC -format %Y-%m-%dT%H:%M:%SZ"任何想法都是非常感谢的!
发布于 2018-06-14 18:21:23
既然您提到了问题有时会发生,这就让我耳熟能详了。该问题很可能是由NaviServer/AOLserver蓝图中的命令顺序引起的,该顺序最终取决于哈希表中不可预测的顺序。我在2018-06-14 12:00 +0200 #1提交给NaviServer源代码存储库的更改可能可以避免这个问题,因为它从蓝图中排除了::tcl名称空间中的所有内容。它的缺点是,如果用户添加内容到::tcl名称空间,这将不会包含在蓝图中...但是用户不应该这样做。
背景:对于纯Tcl代码,NaviServer蓝图中的序列化顺序取决于从哈希表获得的(不稳定的)顺序,因此它可能并不总是相同的。如果msgcat和时钟以任意顺序加载,这些组件的初始化可能会被混淆。
发布于 2018-02-28 23:31:53
我猜你的鼻子指向了正确的方向:
% package req msgcat
1.6.1
% ::msgcat::mclocale
de_at
% ::msgcat::mcset [::msgcat::mclocale] GREGORIAN_CHANGE_DATE 2299527
2299527
% ::msgcat::mc GREGORIAN_CHANGE_DATE
2299527
% msgcat::mclocale dummy_locale
dummy_locale
% ::msgcat::mc GREGORIAN_CHANGE_DATE
GREGORIAN_CHANGE_DATE但是,msgcat::mclocale似乎被“损坏”了,因为没有与关键GREGORIAN_CHANGE_DATE匹配的目录项。或者,名称空间上下文可能会被篡改(在NaviServer蓝图中并非不可能)。但是,您需要在失败之前首先跟踪[msgcat::mclocale]的输出(正如前面的评论所建议的那样)。更不可能的是,在一些(实际的)语言环境中,日历转换还没有完成,并且在clock.tcl中缺失;)
发布于 2018-03-21 13:28:52
这可能对你有用:
set milliseconds [clock clicks]
variable time [format "%s_%03d" [clock format [clock seconds] -format %Y%m%d_%H%M%S] [expr {$milliseconds % 1000}] ]
puts $time
https://stackoverflow.com/questions/49031790
复制相似问题