【问题标题】:How to run one-off python script on Heroku如何在 Heroku 上运行一次性 Python 脚本
【发布时间】:2015-06-26 11:11:30
【问题描述】:

我有一个 Django 应用程序在 Heroku 上运行。我想运行一个名为 import.py 的简单脚本,它将一个 CSV 文件导入到我的模型中。它在我的本地计算机上运行良好。当我尝试使用此命令在 Heroku 上运行脚本时:

heroku run python manage.py < import.py

它所做的只是将脚本读回给我,但不执行任何内容。我做错了什么?

编辑:

这是我运行时得到的结果的开始:heroku run python manage.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)

【问题讨论】:

  • 不应该是heroku run python manage.py shell &lt; import.py吗?
  • 我刚试过。似乎 shell 正在尝试逐行运行文件。但它没有显示与文件中相同的缩进。

标签: python django heroku


【解决方案1】:

为 import.py 编写自定义 management command,然后运行 ​​heroku run python manage.py import.py

【讨论】:

    【解决方案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 一起使用。

    附:我不知道它是否适用于名称'import'

    【讨论】:

    • 谢谢,效果很好!这是gist,以防有人想看。值得注意的是,对于 Python 3,您不需要在文件夹中包含 init.py 文件。
    【解决方案3】:

    您可以使用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 &gt; requirements.txt
    2. 创建scripts 目录,如documentation 中所述
    3. 部署到 Heroku
    4. 在 Heroku 上使用 heroku run 运行它
      • heroku run python manage.py runscript my_script
      • 注意:请勿在上述命令中将.py 附加到您的脚本名称

    你走吧!

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 2013-08-11
      • 2020-11-03
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多