Запускать команды не-django из подкаталога для проекта Django, размещенного на Heroku? - PullRequest
2 голосов
/ 26 января 2012

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

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

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

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

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

bin / scrapy.sh:

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

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

0 голосов
/ 30 января 2012

Не так, как внешние команды запускаются в Heroku, как - Heroku Run команда appdir?

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

heroku run scrapy crawl spidername
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...