2012-08-23 4 views
1

필요한 웹 데이터를 얻기 위해 일부 웹 스크래핑을 수행하는 앱에 jsdom node.js 모듈을 사용하고 있습니다. 이것은 로컬에서 실행할 때 완벽하게 작동합니다.CloudFoundry에서 JSDOM 스크래핑이 작동하지 않습니다.

그러나 응용 프로그램을 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: Cannot read property 'implementation' of undefined

여기에 뭔가가 있습니까? 나는 꽤 난처한 처지이다. 필자가 작성한 코드가 잘 작동한다는 것을 알고 있으며, 모듈과 cloudfoundry 사이의 문제로 보인다.

답변

2

나는이 문제를 꽤 쉽게 재현 할 수있었습니다. jsdom은 Contextify (https://github.com/brianmcd/contextify)라는 네이티브 컴파일 라이브러리를 사용하고 있으며 수집 할 수있는 부분에서 파이썬에 대한 바인딩을 가지고 있습니다. 현재 Cloud Foundry에서 지원하지 않습니다. 이 문제에 관한 Github과 비슷한 질문이 있습니다.

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

이 Domino 및 Zepto 노드라는 두 개의 100 % JS 라이브러리의 사용을 제안 작성시 마지막으로 게시, 그들은 잘 체크 아웃 가치가있을 수 있습니다.

+0

나는 내 문제를 재현하는 데 시간을 들였습니다. 이것이 갈 길이었습니다. 나도 도울 수는 없지만 우리는 같은 회사에서 일한다는 것을 알았다.) – ZacAttack

+0

아! nice, 그 node.js 패키지도 파이썬에 대한 미친 의존성을 가지고 있음이 밝혀졌습니다! 실제로 작동하지 않는 이유는 무엇입니까? –

+0

파이썬 의존성, WTF? cheerio를 위해 jsdom을 버리는 더 많은 이유가 있다면. – jamjam

1

직접 게시 한 내용만으로는 직접 답변을 드릴 수 없습니다.

하지만 몇 가지 제안이 있습니다.

  1. 환경 변수는 개발 환경에서와 동일하게 작동하지 않습니다.

  2. jsdom은 일반적으로 외부에서로드되는 jquery에 의존합니다. 아마도 jquery가 제대로로드되지 않습니다.

혹시 cheerio에 대해 들어 보셨습니까? jquery의 서브 세트를 구현하고 jquery를 외부 적으로로드 할 필요가없는 jsdom의 대안. 이것은 jsdom보다 훨씬 빠릅니다.

cheerio에 대한 소개는 저자가 작성한 video을 시청하고 그 이점에 대해 자세히 알아보십시오.

cheerio github 페이지에서 샘플 코드를 사용하고 cloudfoundry 계정을 업로드하여 모든 것이 작동하는지 확인하십시오. 그런 다음 날씨에 대한 결정을 내리고 cheerio로 전환 할 수 있습니다.

+0

막연한 게시물에 대해 유감스럽게 생각하며, 이것이 내가 계속해야 할 유일한 정보라는 것입니다. 나는 코드를 게시하는 것이 정말로 문제가되는 것만 산만하게 할 것이라고 확신한다. 나는 내 컴퓨터에 돌아 왔을 때 이것을 시험해 볼 것이다. – ZacAttack

관련 문제