Dancer2对服务器上的所有内容进行字符串化,但不对本地字符串化

时间:2019-05-09 11:09:30

标签: json perl serialization ubuntu-16.04

我在Mac的plenv v5.26.2上本地运行相同的代码(我的Dancer2应用程序),但是当我运行该应用程序(无论是使用plackup或starman还是在Apache后面代理,使用SSL时,或者在每个位置使用Curl本地请求) )服务器运行实例正在对响应的有效负载中的所有内容进行字符串化处理。

"custid": "5000",在ubuntu 16服务器上(系统perl v5.22.1-库与本地实例的版本相同)

"custid": 5000,在我的本地计算机上。

在我的config.yml中,我(除了其他地方,但这是唯一的engines街区)

content_type: "application/json"
serializer: "JSON"

engines:
  serializer:
    JSON:
      pretty: 1

数据本身确实来自数据库,但是我的本地计算机和服务器的DBIx::Class分别连接到具有相同ResultSources的同一远程(不是ubuntu本地)mysql服务器。

我能想到的一件事是服务器正在使用Cpanel::JSON::XS,并且在将结果作为字符串“触摸”到序列化程序之前,但是我不确定如何检查哪个JSON库是实际用于每个正在运行的应用实例。

所以- 为什么用相同的代码得到不同的字符串化? 如何检查每个实例上使用的JSON库?

2 个答案:

答案 0 :(得分:2)

Dancer2 uses JSON::MaybeXS决定要加载哪个模块。您可以在其上使用->JSON class method来询问它加载了哪一个。

$ perl -MJSON::MaybeXS -E 'say JSON::MaybeXS->JSON'

答案 1 :(得分:1)

是的,似乎安装了DBD::mysql。我使用的是4.033(并且我没有mysql_config,所以可能使它退回了),似乎有一些更改,因为这可能是原因,但不确定:

也许是以下之一:

Numeric conversions in perl which led to overflow/underflow was ignored even when mysql strict mode was enabled

Use correct format in printf instead of casting variable types

或围绕mysql_config可用进行的任何更改。 无论哪种方式,维护者都会大吃一惊! 此服务器也从14.04 LTS升级,这当然改变了系统perl的功能。 (但我不记得在14.04上注意到过字符串化)