Я развернул приложение 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
?