【问题标题】:Heroku Scheduler doesnt change DB automatically - Script works if executed manuallyHeroku Scheduler 不会自动更改数据库 - 如果手动执行脚本可以工作
【发布时间】:2017-08-10 12:42:44
【问题描述】:

我正在为两个任务使用免费的 Heroku Scheduler 插件。 (耗时不到 10 分钟的小任务应该很容易被 Heroku Scheduler 处理)。

在日志中,我看到 Heroku 调度程序正在执行,但它似乎什么也没做。

这是任务(my_task.py):

from alchemy import db_session
from models import User

all_users = User.query.all()
for user in all_users:
    if user.remind_email_sent == False:
        print "SEND REMIND EMAIL HERE", user.id
        setattr(user, "remind_email_sent", True)

db_session.commit()

这是heroku调度程序中的任务:

日志:heroku 调度程序已执行(但我没有看到任何打印):

Aug 10 14:31:26 monteurzimmer-test app[api] notice Starting process with command `heroku run python my_task.py` by user scheduler@addons.heroku.com
Aug 10 14:31:32 monteurzimmer-test heroku[scheduler] notice Starting process with command `heroku run python my_task.py`
Aug 10 14:31:33 monteurzimmer-test heroku[scheduler] notice State changed from starting to up
Aug 10 14:31:34 monteurzimmer-test heroku[scheduler] notice State changed from up to complete
Aug 10 14:31:34 monteurzimmer-test heroku[scheduler] notice Process exited with status 127

编辑:

好的,确实有一个错误,在日志中我没有显示info。错误显示在这里:

Aug 10 15:02:32 monteurzimmer-test app[scheduler] info bash: heroku: command not found

如果我通过 heroku CLI 手动运行脚本 (heroku run python my_task.py),它工作正常,当前 6 个用户的所有项目都设置为 True

那么为什么调度器在这里不起作用呢?确实有错误,见EDIT。

现在是一个小型的测试数据库,未来计划代替打印给每个用户发一封邮件,会有几百个用户。

【问题讨论】:

    标签: python heroku


    【解决方案1】:

    发现错误后,解决方法其实很简单。它告诉我:

    bash: heroku: command not found
    

    这意味着 heroku 已经在执行 bash,因此不知道命令 heroku。您已经在您的项目文件夹中,只需删除 heroku run 即可:

    python my_task.py
    

    这里要注意:我花了很长时间才找到错误。我假设没有错误,因为我从不在日志中显示 info 的东西(我使用 LogDNA)。因此,在这种情况下,您应该查看日志中的所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-26
      • 2014-03-23
      • 2015-07-28
      • 2015-12-13
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2021-01-01
      相关资源
      最近更新 更多