10

これは非常に長い投稿ですが、広範な調査を行った後、解決策を見つけることができませんでした. 私は OSX 10.8 で Django 1.4.1 / Scrapy 0.14.4 プロジェクトを混在させており、ここでmanage.py説明されているように Django プロジェクトのコマンドで Scrapy を制御しています。たとえば、

python manage.py scrapy crawl example_spider 

問題なく動作します。scrapydこれで、 Web サービスをセットアップしてスパイダーをデプロイする段階になりました。ただし、実行すると

python manage.py scrapy server

次に、この例外が発生します。

scrapy.exceptions.NotConfigured: Unable to find scrapy.cfg file to infer project data dir

scrapy.cfgしたがって、 Scrapy プロジェクト内から実行しないため、Scrapy はファイルを見つけられないようです。ただし、他の Scrapy コマンドは機能します。これは、私の Django プロジェクトsettings.pyで次のことを行ったためです。

sys.path.append('/absolute/path/to/my/Scrapy/project')
os.environ['SCRAPY_SETTINGS_MODULE'] = 'my_scrapy_project_name.settings'

質問 1: Scrapy がscrapy.cfgセットアップでファイルを検出できないのはなぜですか? どうすればこれを解決できますか?


上記のものは機能しないため、Scrapy プロジェクトディレクトリ内からコマンドscrapydだけを使用してサーバーを実行しようとしました。Scrapy プロジェクトの最上位ディレクトリから実行すると、次の結果が得られますscrapyscrapy server

$ scrapy server
UserWarning: Cannot import scrapy settings module my_scrapy_project_name.settings
warnings.warn("Cannot import scrapy settings module %s" % scrapy_module)
2012-08-31 21:58:31+0200 [-] Log opened.
2012-08-31 21:58:32+0200 [-] Scrapyd web console available at http://localhost:6800/
2012-08-31 21:58:32+0200 [Launcher] Scrapyd started: max_proc=8, runner='scrapyd.runner'
2012-08-31 21:58:32+0200 [-] Site starting on 6800
2012-08-31 21:58:32+0200 [-] Starting factory <twisted.web.server.Site instance at 0x101dd3d88> 

サーバーは問題なく実行settings.pyされていますが、それぞれの環境変数が設定されていないため、Scrapy プロジェクトのファイルが見つかりません。そのため、端末で次のことを行います。

export PYTHONPATH=/absolute/path/to/my/Scrapy/project
export SCRAPY_SETTINGS_MODULE=my_scrapy_project_name.settings

残念ながら、これら 2 つのコマンドは効果がありません。scrapy server(または他の Scrapy コマンドを)実行するたびに、Scrapy がそのプロジェクトの設定モジュールをインポートできないというメッセージが表示されます。

scrapy.cfg現時点では、次のコンテンツしかありません。

[settings]
default = my_scrapy_project_name.settings

[deploy:scrapyd]
url = http://localhost:6800/
project = my_scrapy_project_name

Scrapy プロジェクトをscrapydサーバーにデプロイしようとすると、最初はうまくいくように見えますが、おそらく設定ファイルが検出されなかったため、スパイダーがアップロードされていないことに気付きました。コンソール出力は次のとおりです。

$ scrapy deploy scrapyd -p my_scrapy_project_name
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-
packages/scrapy/utils/project.py:17: UserWarning: Cannot import scrapy
settings module my_scrapy_project_name.settings
 warnings.warn("Cannot import scrapy settings module %s" %
scrapy_module)
Building egg of event_crawler-1346531706
'build/lib' does not exist -- can't clean it
'build/bdist.macosx-10.6-intel' does not exist -- can't clean it
'build/scripts-2.7' does not exist -- can't clean it
zip_safe flag not set; analyzing archive contents...
Deploying event_crawler-1346531706 to http://localhost:6800/addversion.json
Server response (200):
{"status": "ok", "project": "my_scrapy_project_name", "version": "1346531706", "spiders": 0}

質問 2:上記のパスと環境変数を正しくエクスポートして、この警告が表示されないようにする方法を教えてください。

質問 3:サーバーはscrapyd正常に動作しているようですが、スパイダーを正しくアップロードするにはどうすればよいですか?

よろしくお願いします!

4

1 に答える 1

3

この例外を発生させるコード ブランチと、それが呼び出す関数定義をclosest_scrapy_cfg見ると、scrapy が自分の Scrapy.cfg を探す唯一の場所は、コマンドを実行するディレクトリと任意の親ディレクトリにあります。manage.py で実行するos.chdirか、scrapy.cfg を実行元のディレクトリに移動できます。

于 2012-09-11T06:22:13.340 に答える