Скрапинг JSDOM на cloudfoundry не работает

Я использую модуль jsdom node.js для приложения, которое выполняет парсинг в Интернете, чтобы получить необходимые данные. Это отлично работает, когда я запускаю локально.

Однако, когда я отправляю приложение в cloudfoundry, оно падает. Журнал выглядит следующим образом:

====> /logs/stderr.log ‹====

/var/vcap/data/dea/apps/caretogethersandbox-0-8b20af9255bbf552d0f490cb60d0df55/app/node_modules/jsdom/lib/jsdom.js:171 features = JSON.parse(JSON.stringify(window.document.implementation._fea ^TypeError: Не удается прочитать свойство «реализация» неопределенного

Есть ли что-то, что мне здесь не хватает? Я довольно озадачен. Я знаю, что код, который я написал, работает нормально, просто кажется, что это проблема между модулем и cloudfoundry.


person ZacAttack    schedule 23.08.2012    source источник


Ответы (2)


Я смог воспроизвести эту проблему довольно легко. Кажется, что jsdom полагается на собственную скомпилированную библиотеку под названием Contextify (https://github.com/brianmcd/contextify ), а также имеет некоторые привязки к Python из того, что я могу собрать. В настоящее время они не поддерживаются Cloud Foundry. На Github есть аналогичный вопрос об этой проблеме;

https://github.com/tmpvar/jsdom/issues/436

Последний пост на момент написания этой статьи предполагает использование двух 100% JS-библиотек под названием Domino и Zepto Node, возможно, их стоит проверить.

person Dan Higham    schedule 23.08.2012
comment
Я действительно тронут тем, что вы нашли время, чтобы воспроизвести мою проблему. Это был путь. Я тоже не мог не заметить, что мы работаем в одной компании ;) - person ZacAttack; 23.08.2012
comment
Ах! хорошо, оказывается, что пакет node.js также имеет некоторую сумасшедшую зависимость от Python! Собственно поэтому и не работает! - person Dan Higham; 23.08.2012
comment
Зависимость от Python, WTF? Если больше причин отказаться от jsdom для cheerio. - person jamjam; 23.08.2012
comment
@jamjam Мне очень понравился модуль cheerio, он ДЕЙСТВИТЕЛЬНО быстро делал то, что мне было нужно. К сожалению, я также не смог запустить его в cloudfoundry :( что позорно, поскольку я борюсь с использованием памяти с модулями Domino Zepto - person ZacAttack; 24.08.2012

Имея только то, что вы опубликовали, практически невозможно дать вам прямой ответ.

Но у меня есть пара предложений.

  1. У вас есть переменные окружения, которые не работают так же, как при разработке.

  2. jsdom использует jquery, который обычно загружается извне. Возможно, jquery не загружается должным образом.

Слышали ли вы о cheerio. Это альтернатива jsdom, которая реализует подмножество jquery и не требует внешней загрузки jquery. Это делает намного быстрее, чем jsdom.

Вы можете посмотреть это видео, созданное автором для ознакомления с Cheerio, и узнать больше о его преимуществах.

Используйте образец кода на странице cheerio github и загрузите его в свою учетную запись cloudfoundry, чтобы проверить, все ли работает. Затем вы можете принять решение о погоде, чтобы переключиться на Cheerio.

person jamjam    schedule 23.08.2012
comment
Да, извините за расплывчатый пост, просто это единственная информация, которой я могу поделиться. Я почти уверен, что публикация кода только отвлечет от реальной проблемы. Я попробую, когда вернусь к своему основному компьютеру. - person ZacAttack; 23.08.2012