如何在 Heroku 上 运行 一次性 python 脚本
How to run one-off python script on Heroku
我有一个 Django 应用程序,运行正在 Heroku 上运行。我想要 运行 一个名为 import.py 的简单脚本,它将 CSV 文件导入到我的模型中。它在我的本地计算机上运行良好。当我尝试使用此命令 运行 Heroku 上的脚本时:
heroku run python manage.py < import.py
它所做的只是将脚本读回给我,但不执行任何内容。我做错了什么?
编辑:
这是我在 运行 时得到的结果的开始: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)
为 import.py 编写自定义 management command,然后 运行 heroku run python manage.py import.py
。
我认为您应该为此创建命令。命令应放在项目的 app/management/commands
目录中。如果此目录不存在,请创建它。脚本的名称是您的命令的名称,因此您应该将其命名为 import.py
(错误的名称...)。必须做的另一件事是在 'management' 和 'commands' 目录中创建 __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。我不知道它是否适用于名称 'import'
可以使用django-extensions
runscript command。此命令允许您通过 manage.py
:
在 Django 上下文中 运行 python 脚本
python manage.py runscript my_script
要使用 Heroku 执行此操作:
- 安装
django-extensions
并确保它在您的 requirements.txt
中
pip install django-extensions
pip freeze > requirements.txt
- 创建
scripts
目录,如 documentation 中所述
- 部署到 Heroku
- 运行 它在 Heroku 上
heroku run
heroku run python manage.py runscript my_script
- 注意:不要在上面的命令中将
.py
附加到您的脚本名称中
然后开始吧!
我有一个 Django 应用程序,运行正在 Heroku 上运行。我想要 运行 一个名为 import.py 的简单脚本,它将 CSV 文件导入到我的模型中。它在我的本地计算机上运行良好。当我尝试使用此命令 运行 Heroku 上的脚本时:
heroku run python manage.py < import.py
它所做的只是将脚本读回给我,但不执行任何内容。我做错了什么?
编辑:
这是我在 运行 时得到的结果的开始: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)
为 import.py 编写自定义 management command,然后 运行 heroku run python manage.py import.py
。
我认为您应该为此创建命令。命令应放在项目的 app/management/commands
目录中。如果此目录不存在,请创建它。脚本的名称是您的命令的名称,因此您应该将其命名为 import.py
(错误的名称...)。必须做的另一件事是在 'management' 和 'commands' 目录中创建 __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。我不知道它是否适用于名称 'import'
可以使用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
目录,如 documentation 中所述
- 部署到 Heroku
- 运行 它在 Heroku 上
heroku run
heroku run python manage.py runscript my_script
- 注意:不要在上面的命令中将
.py
附加到您的脚本名称中
然后开始吧!