Как выполнить скрипт Python на Heroku?

У меня есть скрипт Python, который мне нужно запустить только один раз (я не хочу, чтобы его нужно было фиксировать в репо для отправки в экземпляр Cedar).

Скрипт собирает данные по моим моделям Django и выводит файл .csv.

Обычно в AWS я бы scp отправил сценарий на сервер, manage.py shell < script.py и scp созданный .csv обратно на свою машину.

Я понимаю, что файловые системы Heroku эфемерны, но есть ли способ получить созданные файлы на серверах Heroku, не загружая их на S3?

Вот мой лучший снимок:

cat script.py | heroku run manage.py shell --app appname

Работает для однострочного скрипта, но не с разрывами строк.

Кроме того, вышеприведенный скрипт выдает только вывод командной строки, а не возвращает CSV-файл.


person grokpot    schedule 09.12.2013    source источник


Ответы (3)


Heroku не дает вам разрешения на запись где-либо на вашем dyno (единственные файлы, которые он записывает, — это те, которые он извлекает из вашей основной ветки, когда вы нажимаете обновление, и любые зависимости). Вам нужно будет загрузить свой вывод на S3, сохранить его в журнале или найти какой-либо другой механизм доставки (электронная почта?)

person jraede    schedule 09.12.2013
comment
Спасибо. Это сэкономило мне время. - person Prashanth; 05.11.2016

Я хотел выполнить скрипт Python вручную в героку один раз. Вот как это работало:

  1. import django в вашем сценарии
  2. добавьте строку django.setup() в свой скрипт python (это важно, чтобы иметь возможность использовать созданные модели в django)
  3. команда оболочки (должна быть выполнена в вашем репозитории git): heroku run bash
  4. команда bash: export DJANGO_SETTINGS_MODULE=projectsname.settings
  5. команда bash: cd projectsname
  6. команда bash: python yourscriptname.py
person LaLa    schedule 16.06.2015

Вы почти там. Проблема, с которой вы столкнулись, больше связана с тем, как работает типичный синтаксис оболочки.

У вас есть cat script.py | heroku run manage.py shell --app appname, который передает скрипт без разрывов строк.

Чтобы получить разрывы строк, попробуйте это.

heroku run python -c "`cat script.py`" --app appname

Ключ заключается в том, чтобы заключить обратные кавычки в двойные кавычки, чтобы сохранить разрывы строк в сценарии.

person Community    schedule 14.06.2016