Запуск команд, отличных от django, из подкаталога для проекта Django, размещенного на Heroku?

Я развернул приложение Django на Heroku. Приложение само по себе работает нормально. Я могу запускать такие команды, как heroku run python project/manage.py syncdbи heroku run python project/manage.py shell, и это работает хорошо.

В моем проекте Django используется библиотека веб-скрейпинга Python под названием Scrapy. Scrapy поставляется с командой под названием scrapy crawl abc, которая помогает мне очищать веб-сайты, которые я определил в приложении scrapy. Когда я запускаю команду scrapy, такую ​​как scrapy crawl spidername, на моем локальном компьютере, приложение может очистить дату и скопировать ее в мою базу данных. Однако, когда я запускаю ту же команду на Heroku в подкаталоге каталога моего проекта heroku run scrapy crawl spidername, ничего не происходит.

Я не вижу в журналах Heroku ничего, что могло бы указать на то, где я ошибаюсь:

2012-01-26T15:45:38+00:00 heroku[run.1]: State changed from created to starting
2012-01-26T15:45:43+00:00 app[run.1]: Awaiting client
2012-01-26T15:45:43+00:00 app[run.1]: Starting process with command `project/spiderMainDir scrapy crawl spidername`
2012-01-26T15:45:44+00:00 heroku[run.1]: State changed from starting to up
2012-01-26T15:45:46+00:00 heroku[run.1]: State changed from up to complete
2012-01-26T15:45:46+00:00 heroku[run.1]: Process exited

Некоторая дополнительная информация:

Мое приложение scrapy вызывает pipelines.py для сохранения очищенных элементов в базе данных. В файле pipelines.py это то, что я написал, чтобы вызвать настройки Django, чтобы я мог импортировать свои модели и сохранять данные в базу данных из приложения scrapy.

import os,sys
PROJECT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(PROJECT_PATH)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

Любые указатели на то, где именно я ошибаюсь? Как мне выполнить команду scrapy на Heroku, чтобы мое приложение могло очистить внешний веб-сайт и сохранить эти данные в базе данных. Разве внешние команды не запускаются в Heroku как - heroku run command?


person Arpit Rai    schedule 26.01.2012    source источник


Ответы (2)


Я отвечаю на свой вопрос, потому что я обнаружил, в чем проблема. Heroku по какой-то причине не смог найти scrapy, когда я выполнил команду из подкаталога, а не из каталога верхнего уровня.

Команда heroku run ... обычно запускается из каталога верхнего уровня. Для моего проекта, в котором используется скрап, мне нужно было перейти в подкаталог и запустить команду scrapy из подкаталога (именно так разработан скрап). Это не работало в Heroku. Поэтому я отправился на вечеринку Heroku, набрав heroku run bash, чтобы посмотреть, что происходит. Когда я запустил команду scrapy из каталога верхнего уровня, Heroku распознал команду, но когда я перешел в подкаталог, он не смог распознать команду scrapy. Я предполагаю, что есть некоторая проблема, связанная с путем. Из подкаталога мне пришлось указать полный путь к scrapy (~/bin/scrapy crawl spidername), чтобы иметь возможность его выполнить.

Чтобы запускать команду scrapy, не заходя каждый раз в Heroku bash вручную, моя работа по решению этой проблемы заключалась в том, что я создал сценарий оболочки, содержащий следующий код, и поместил его в каталог bin моего каталога верхнего уровня и отправил изменения в Heroku. .

бин/scrapy.sh :

#!/usr/bin/env bash 
cd ~/project/spiderSubDirectory
~/bin/scrapy $@

После того, как это было сделано, я мог выполнить $ heroku run scrapy.sh crawl spidername из своего локального bash. Я полагаю, что это не лучшее решение, но это работает.

person Arpit Rai    schedule 01.02.2012

Разве внешние команды не запускаются в Heroku, например, команда heroku run appdir?

На самом деле это heroku run command. Включив туда ваш appdir, вы получите недопустимую команду. Вывод Heroku не дает полезных сообщений об ошибках, когда эти команды терпят неудачу, а вместо этого просто сообщает вам, что команда завершена, что вы и видите. Итак, для вас просто измените команду на что-то вроде:

heroku run scrapy crawl spidername
person Spike    schedule 30.01.2012
comment
Привет. Извините, проблема заключалась в запуске heroku run из подкаталога. Мой вопрос был не очень ясен в том смысле, что я пытался запустить heroku run scrapy crawl spidername из подкаталога, и это не сработало. Я добавил ответ, который касается работы. - person Arpit Rai; 01.02.2012