2

Scrapyを使用してクローラープロジェクトをScrapydインスタンスにデプロイしようとしていますが、commendを呼び出すと次のエラーが返されます。

サーバーの応答(200):{"status": "error"、 "message": "AttributeError:'NoneType'オブジェクトに属性'module_name'"}がありません

デプロイ中に送信されたPythoneggをビルドするためのsetup.pyは次のとおりです。

from setuptools import setup, find_packages

setup(
    name = 'mycrawler',
    version = '0.1',
    packages = find_packages(),
    install_requires = [
        'scrapy',
        'PyMongo',
            'simplejson',
            'queue'
    ]
)

私のscrapy.cfg:

[settings]
default = mycrawler.settings

[deploy:scrapyd_home_vm]
url = http://192.168.1.2:6800/
project = mycrawler

[deploy:scrapyd_local_vm]
url = http://192.168.38.131:6800/
project = mycrawler

これは卵の作り方と関係があるように感じますが、よくわかりません。オブジェクトであるはずの属性にアクセスすると、Pythonがこのようなエラーをスローすることは知っていますが、何らかの理由で実際にはnullです。また、「module_name」属性を持つものや、自分のコードでそれを参照しようとするものはありません。スクレイプからクローラーをローカルで実行することは問題なく機能しますが、eggをデプロイすることはできません。

4

3 に答える 3

9

かなり遅い答えですが、この同じ問題に遭遇し、解決策を見つけました。

scrapyd私にとっての問題は、それ自体から発生するトレースバックを見ることで見つけることができました。

Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/vagrant/venv/lib/python2.7/site-packages/scrapyd/runner.py", line 39, in <module>
    main()
  File "/home/vagrant/venv/lib/python2.7/site-packages/scrapyd/runner.py", line 34, in main
    with project_environment(project):
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/home/vagrant/venv/lib/python2.7/site-packages/scrapyd/runner.py", line 22, in project_environment
    activate_egg(eggpath)
  File "/home/vagrant/venv/local/lib/python2.7/site-packages/scrapyd/eggutils.py", line 13, in activate_egg
    settings_module = d.get_entry_info('scrapy', 'settings').module_name

AttributeError: 'NoneType' object has no attribute 'module_name'

ご覧のとおり、scrapyプロジェクトの settings_module を読み込もうとしています。が None オブジェクトを返すため、module_name属性は存在しません。d.get_entry_info

解決策はsetup.py、卵を生成するために使用されていることを確認し、セットアップの呼び出しに次の行が含まれていることを確認することです。

packages=find_packages(),
entry_points={'scrapy': ['settings = scraper.settings']},

これは、 scrapyscraper.settingsプロジェクトの設定ファイルへの Python モジュール パスです。これをプロジェクトのレイアウトを反映するものに変更すると、ダンディになるはずです..

..そうでない場合、ここで重要なのは、scrapyd(デバッグを有効にすると、サーバーの応答でそれを確認できる) からの出力を確認して、解決策を見つけることです。

于 2013-11-27T11:37:53.977 に答える
-1

これは、おそらくmycrawlerモジュール内のコーディング エラーです。

AttributeError: 'NoneType' object has no attribute 'module_name'

これはmodule_name、何らかの関数またはメソッドによって返されたオブジェクトの属性にアクセスしようとしているが、戻り値がNoneオブジェクトではないことを意味します (おそらく、関数またはメソッドがエラーが発生したことを示す方法)。

module_name戻り値で名前を参照する場所をコードで確認してください。

または、scrapy定義して渡すオブジェクトの 1 つにmodule_name属性を定義する必要があり、それを忘れている可能性があります。

最後に、それは のバグである可能性がありますscrapy

しかし、それが問題になる可能性はほとんどありませんsetuptools

于 2013-01-31T20:54:03.507 に答える