如何在Heroku上运行一次性python脚本

时间:2015-04-19 21:02:07

标签: python django heroku

我在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)

3 个答案:

答案 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

在Django上下文中运行python脚本
python manage.py runscript my_script

使用Heroku执行此操作:

  1. 安装django-extensions并确保其requirements.txt
    • pip install django-extensions
    • pip freeze > requirements.txt
  2. 按照documentation
  3. 中的说明创建scripts目录
  4. 部署到Heroku
  5. 使用heroku run在Heroku上运行它
    • heroku run python manage.py runscript my_script
    • 注意:请勿在上述命令中将.py附加到您的脚本名称
  6. 然后你走了!