我在Heroku上运行了一个Django应用程序。我想运行一个名为import.py的简单脚本,它将CSV文件导入到我的模型中。它在我的本地计算机上运行良好。当我尝试使用此命令在Heroku上运行脚本时:
heroku run python manage.py < import.py
所有这一切都是将脚本读回给我,但不执行任何内容。我做错了什么?
编辑:
这是我运行时得到的结果的开始:heroku run python manage.py&lt; 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 :(得分:2)
我认为你应该为此创建命令。命令应放在项目的app/management/commands
目录中。如果此目录不存在,请创建它。脚本的名称是命令的名称,因此您应将其命名为import.py
(错误名称...)。另一件必须要做的事情是在“管理”和“管理”中创建__init__.py
个文件。和&#39;命令&#39;目录,因为这些必须是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。我不知道它是否适用于名称&#39; import&#39;
答案 1 :(得分:1)
为import.py编写自定义management command,然后运行heroku run python manage.py import.py
。
答案 2 :(得分:1)
您可以使用django-extensions
runscript command。此命令允许您通过manage.py
:
python manage.py runscript my_script
使用Heroku执行此操作:
django-extensions
并确保其requirements.txt
pip install django-extensions
pip freeze > requirements.txt
scripts
目录
heroku run
在Heroku上运行它
heroku run python manage.py runscript my_script
.py
附加到您的脚本名称然后你走了!