1

必要なデータを取得するためにWebスクレイピングを行うアプリにjsdomnode.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の間の問題のようです。

4

2 に答える 2

2

この問題をかなり簡単に再現することができました。jsdomはContextify(https://github.com/brianmcd/contextify)と呼ばれるネイティブのコンパイル済みライブラリに依存しているようで、収集できるものからPythonへのバインディングもいくつかあります。現在、これらはCloudFoundryではサポートされていません。この問題についてGithubにも同様の質問があります。

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

これを書いている時点での最後の投稿は、DominoとZepto Nodeと呼ばれる2つの100%JSライブラリの使用を示唆しています。これらはチェックする価値があるかもしれません。

于 2012-08-23T06:31:12.693 に答える
1

あなたが投稿したものだけで、あなたに直接の答えを与えることはほとんど不可能です。

しかし、私にはいくつかの提案があります。

  1. 開発時と同じように本番環境では機能しない環境変数があります。

  2. jsdomは、通常は外部から読み込まれるjqueryに依存しています。おそらくjqueryが正しくロードされていません。

cheerioについて聞いたことがありますか。jqueryのサブセットを実装し、jqueryを外部にロードする必要がないjsdomの代替手段です。これにより、jsdomよりもはるかに高速になります。

cheerioの紹介のために作者が作成したこのビデオを見て、その利点の詳細を学ぶことができます。

cheerio githubページのサンプルコードを使用し、cloudfoundryアカウントにアップロードして、すべてが機能するかどうかを確認します。次に、天気を決定してcheerioに切り替えることができます。

于 2012-08-23T02:36:16.460 に答える