2015-04-19 9 views
4

У меня есть приложение Django, работающее на Heroku. Я хочу запустить простой скрипт под названием import.py, который импортирует CSV-файл в мои модели. Он отлично работает на моем локальном компьютере. Когда я пытаюсь запустить скрипт на Heroku с помощью этого ввода команды:Как запустить разовый скрипт python на Heroku

Всего это делает прочитал сценарий обратно ко мне, но не выполняет какие-либо содержания. Что я делаю не так?

Edit:

Это начало результата я получаю, когда я бегу: Heroku запустить Python manage.py < import.py

Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> import csv 
>>> from bah_api.models import withDependents, withOutDependents, ZipMHA 
>>> 
>>> # Populate CSV file into model 
>>> def LoadCSV(file_location, my_model, delim): 
... f = open(file_location) 
    File "<console>", line 2 
    f = open(file_location) 
    ^
IndentationError: expected an indented block 
>>> csv_f = csv.reader(f, delimiter=delim) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
NameError: name 'f' is not defined 
>>> for row in csv_f: 
... 
Display all 182 possibilities? (y or n) 
+0

Не должно быть 'heroku run python manage.py shell Selcuk

+0

Я просто попробовал это. Кажется, что оболочка пытается запустить файл по строкам. Но он не показывает тот же отступ, который находится в файле. – Casey

ответ

2

Думаю, вам следует создать команду для этого. Команды должны быть размещены в каталоге app/management/commands в вашем проекте. Если этот каталог не существует, создайте его. Имя скрипта - это имя вашей команды, поэтому вы должны называть его import.py (неправильное имя ...). Еще одна вещь, которая должна быть сделана, заключается в создании файлов __init__.py в каталогах «управления» и «командами», поскольку они должны быть пакетами Python. Дерево должно быть так:

app 
├── admin.py 
├── __init__.py 
├── management 
│ ├── commands 
│ │ ├── __init__.py 
│ │ └── import.py 
│ └── __init__.py 
├── models.py 
... other files 

Теперь вы должны быть в состоянии сделать что-то вроде этого: python manage.py import (очень плохо имя ...)

Или heroku run python manage.py import будет работать с Heroku.

P.S. Я не знаю, работает ли оно с именем «импорт»

+0

Спасибо, это сработало хорошо! Вот вам [hist] (https://gist.github.com/caser85/116f1407f26ccdb88902), если кто-то хочет его увидеть. Следует отметить, что для Python 3 вам не нужно включать файлы __init__.py в папки. – Casey

1

Вы можете использовать django-extensions . Эта команда позволяет запускать питон сценарии в контексте Django с помощью manage.py:

python manage.py runscript my_script 

Чтобы сделать это с Heroku:

  1. Установите django-extensions и убедитесь, что это в вашем requirements.txt
    • pip install django-extensions
    • pip freeze > requirements.txt
  2. Создание каталога scripts, как описано в documentation
  3. Deploy на Heroku
  4. запустить его на Heroku с heroku run
    • heroku run python manage.py runscript my_script
    • Примечание: не присоединять .py к вашему имени сценария в вышеуказанная команда

И вы уходите!

Смежные вопросы