Dancer2 переводит все на сервер, но не локально - PullRequest
1 голос
/ 09 мая 2019

Я запускаю идентичный код (мое приложение Dancer2) локально на моем Mac plenv v5.26.2, но когда я запускаю приложение (будь то с 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 соответственно подключаются к одному и тому же удаленному (не локальному для ubuntu) серверу mysql с теми же ResultSources.

Одна вещь, о которой я могу думать, это то, что сервер будет использовать Cpanel::JSON::XS, и что-то «касается» результатов в виде строк, прежде чем они попадут в сериализатор, но я не уверен, как проверить, какая библиотека JSON фактически используется на каждом запущенном экземпляре приложения.

Итак - Почему я получаю разные строки с одним и тем же кодом? Как проверить, какая библиотека JSON используется в каждом экземпляре?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Dancer2 использует JSON :: MaybeXS , чтобы решить, какой модуль загрузить. Вы можете использовать ->JSON метод класса , чтобы узнать, какой из них загружен.

$ perl -MJSON::MaybeXS -E 'say JSON::MaybeXS->JSON'
1 голос
/ 09 мая 2019

Да, похоже, это был DBD::mysql, который был установлен.У меня был 4.033 (и у меня не было mysql_config, так что, вероятно, это сдерживало его), и, похоже, есть несколько изменений, поскольку это может быть причиной, но не уверен:

Возможно, одно из:

Числовые преобразования в perl, которые привели к переполнению / недополнению, игнорировались, даже когда был включен строгий режим mysql

Используйте правильный формат в printf вместо приведения типов переменных

Или любые изменения, связанные с наличием mysql_config.В любом случае большие взлеты с сопровождающими!Также этот сервер был обновлен с 14.04 LTS, что, конечно, изменило системные свойства Perl.(Но я не помню, чтобы заметил 14.04 строковость)

...