繁体   English   中英

如何在 Heroku 上执行 python 脚本?

[英]How do I execute a python script on Heroku?

我有一个 python 脚本,我只需要运行一次(我不想将它提交到 repo 以发送到 Cedar 实例)。

该脚本在我的 Django 模型上聚合数据并输出一个 .csv 文件。

通常在 AWS 中,我会将脚本scp到服务器, manage.py shell < script.py ,然后将生成的 .csv scp回我的机器。

我知道 Heroku 文件系统是短暂的,但是有没有办法在 Heroku 服务器上检索生成的文件而不将它们上传到 S3?

这是我最好的镜头:

cat script.py | heroku run manage.py shell --app appname

适用于单行脚本,但不适用于换行符。

此外,上述脚本只会产生命令行输出,不会返回 .csv 文件。

Heroku 不会在你的 dyno 的任何地方给你写权限(它写入的唯一文件是在你推送更新时从你的主分支检出的文件,以及任何依赖项)。 您必须将输出上传到 S3,将其保存到日志中,或者找到其他一些传送机制(电子邮件?)

我想一次在 heroku 中手动执行一个 python 脚本。 它是这样工作的:

  1. 在脚本中import django
  2. 在你的 python 脚本中添加一行django.setup() (这对于能够在 django 中使用创建的模型很重要)
  3. shell 命令(必须在您的 git 存储库中执行): heroku run bash
  4. bash 命令: export DJANGO_SETTINGS_MODULE=projectsname.settings
  5. bash 命令: cd projectsname
  6. bash 命令: python yourscriptname.py

你快到了。 您遇到的问题更多地与典型的 shell 语法的工作方式有关。

你有cat script.py | heroku run manage.py shell --app appname cat script.py | heroku run manage.py shell --app appname ,它在脚本中没有换行符。

为了让你的换行符试试这个。

heroku run python -c "`cat script.py`" --app appname

关键是用双引号将反引号括起来,这样脚本中的换行符就得以保留。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM