2012-08-31 7 views
8

Questo è un post piuttosto lungo, ma dopo una ricerca approfondita non sono riuscito a trovare una soluzione. Ho un progetto misto Django 1.4.1/Scrapy 0.14.4 su OSX 10.8 e controllo Scrapy con il comando manage.py del progetto Django come descritto here. Ad esempio, chiamandoImpossibile importare il modulo delle impostazioni di Scrapy o il suo scrapy.cfg

python manage.py scrapy crawl example_spider 

funziona senza problemi. Ora sono al punto in cui voglio configurare il servizio web scrapyd per distribuire i miei spider. Tuttavia, quando ho eseguire

python manage.py scrapy server 

tanto sono questa eccezione:

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

Quindi, a quanto pare Scrapy non può trovare il file scrapy.cfg perché io non eseguo dall'interno del progetto Scrapy. I comandi altro Scrapy lavoro, tuttavia, perché nel mio progetto Django settings.py ho fatto la seguente:

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

Domanda 1: Perché non è possibile rilevare il file Scrapy scrapy.cfg nella mia messa a punto? Come posso risolvere questo?


Poiché la roba di cui sopra non funziona, ho cercato di ottenere l'esecuzione utilizzando solo il comando scrapyd server di scrapy da dentro il mio directory del progetto Scrapy. Esecuzione scrapy server dalla directory di livello superiore del mio progetto Scrapy produce il seguente:

$ 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> 

Il server esegue senza un problema, tuttavia, il file settings.py del mio progetto Scrapy non può essere trovata, perché la rispettiva variabile d'ambiente non è impostare più. Ecco perché faccio quanto segue nel mio terminale:

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

Sfortunatamente, questi due comandi non hanno alcun effetto. Ogni volta che eseguo scrapy server (o qualsiasi altro comando Scrapy), ottengo il messaggio che Scrapy non può importare il modulo delle impostazioni del progetto.

mio scrapy.cfg ha solo il seguente contenuto in questo momento:

[settings] 
default = my_scrapy_project_name.settings 

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

Quando cerco di distribuire il mio progetto Scrapy al server scrapyd, sembra funzionare in un primo momento, ma poi ho capito che nessuno dei gli spider sono stati caricati, probabilmente perché il file delle impostazioni non può essere rilevato. Ecco l'output della console:

$ 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} 

Domanda 2: Come fare la corretta esportazione della variabile di percorso e l'ambiente al di sopra in modo che questo avvertimento scompare?

Domanda 3: Poiché il server scrapyd sembra funzionare correttamente, come posso caricare correttamente i miei spider?

Molte grazie in anticipo!

risposta

2

ci sono 3 i collegamenti all'interno del wiki of scrapy:

the first one e second one sono entrambi affrontando i problemi con Django e Scrapy impostazioni in conflitto.

speranza che questo aiuta ...

anche this question su SO risolve un sacco di impostazioni-problemi tra Django e Scrapy

+1

Grazie per avermi indicato sul wiki. Non ero a conoscenza del fatto che esiste una wiki della comunità sulla pagina github di Scrapy. [Questo tutorial] (http://www.sammyliu.com/2012/06/22/tutorial-scrapy-and-django) mi ha dato l'indizio essenziale: non devo solo spostare il file 'scrapy.cfg' alla directory del progetto Django più in alto, ma anche all'intera directory del progetto Scrapy. Ora i miei spider possono essere correttamente caricati sul server Scrapyd e tutte le variabili di ambiente sono riconosciute. Quindi, dal momento che mi hai indicato nella giusta direzione, ti premo la taglia. Besten Dank, Ralf. :) – pemistahl

2

Se si guarda al code branch that raises this exception e la definition of the closest_scrapy_cfg function che chiama, l'unico posto scrapy sta cercando il tuo scrapy.cfg è nella dir da cui viene eseguito il comando e qualsiasi directory genitore. Puoi forse eseguire os.chdir nel tuo manage.py o spostare scrapy.cfg nella directory da cui stai eseguendo.

+0

Ho già provato a spostare il file 'scrapy.cfg' nella stessa directory in cui si trova il file' manage.py'. Funziona, ma il problema che nessuno dei miei spider è caricato sul server esiste ancora. L'esportazione delle variabili di ambiente non funziona. – pemistahl

Problemi correlati