【问题标题】:How to update environment variables through python code on Heroku?如何通过 Heroku 上的 python 代码更新环境变量?
【发布时间】:2021-09-20 18:13:42
【问题描述】:

我想做的是:

  1. 我正在尝试制作一个 Telegram-bot,当特定网页上有新帖子更新时,它会向我发送消息。
  2. 我制作了代码并将其上传到 Heroku。
  3. 机器人使用 Heroku Scheduler 设置为每 10 分钟启动一次,以便检测每 10 分钟更新一次的任何新帖子。

现在的问题是:

  1. 代码被设置为记住最新的帖子编号,如果在上一次机器人运行和当前运行之间没有任何更新,则不会发出任何警报。

  2. 如果上次运行中保存的帖子编号与当前运行中的最新帖子编号匹配,则机器人不应该提醒我并继续执行预定的过程(继续每 10 分钟检查一次新帖子)。

  3. 这是我为完成这项工作而制作的

    import os
    
    latest_num = os.environ.get("POST_ID")
    
    post_num = posts.find("td", {"class" : "no"}).text.strip()
    
    if latest_num != post_num :
      latest_num = post_num
      os.environ["POST_ID"] = latest_num
    
  4. 我假设如果上次运行的最新帖子编号通过 Heroku 上的环境变量保存为“POST_ID”,则它应该出现在当前运行中,并且在使用 os.environ 读取 @ 时为 latest_num 的值987654324@ 来自环境变量。

  5. 但问题是,似乎os.environ["POST_ID"] 在当前运行完成后并没有覆盖它的值。 Heroku调度器每次启动程序时,'latest_num'的值为0,与Heroku设置中"POST_ID"的默认值相同。

  6. 因此,即使没有新帖子,机器人也会不断向我发送消息,因为 'latest_num' 始终与 'post_num' 不匹配。

我该如何解决这个问题?实际上,我不知道是否可以通过python代码设置环境变量。请告诉我是否有更好的方法来完成这项工作。

【问题讨论】:

  • 为什么你不将上一个帖子编号保存在文本文件或 python 变量中?
  • 哦,那是我无法想象的。我现在就试试。谢谢!
  • 我建议使用 Heroku 的数据库解决方案来持久化更新的值
  • @Kshitiz 过分了,是的。但是文件和环境变量不是持久的,因为 Heroku dynos 会定期重启。
  • 感谢您的建议。由于 Heroku 的存储是短暂的,我无法将更改后的 post_id 保存在 txt 文件中。经过一番尝试,我刚刚发现可以使用一个名为 PostgreSQL 的服务作为数据库来保存可变数据。所以我正在测试这个方法,我认为这个方法效果很好!

标签: python heroku environment-variables


【解决方案1】:

您可以将之前的post id 保存在文本文件或python variable 中。我更喜欢将它保存在文本文件中,因为如果您重新启动或关闭程序,那么它会忘记所有以前的东西,但它不适用于文本文件。 这是代码:首先在保存时这样做:

post_num = posts.find("td", {"class" : "no"}).text.strip()
with open("pre.txt","wb") as f:
    f.write(post_num)

现在你的刮刮第二次然后这样做:

post_num = posts.find("td", {"class" : "no"}).text.strip()
with open("pre.txt","rb") as f:
    pre_num=f.read()
if post_num!=pre_num:
    #Do Something 
    with open("pre.txt","wb") as f:
        f.write(post_num)
else:
    #Do something

【讨论】:

  • Heroku 的文件系统是短暂的 help.heroku.com/K1PPS2WM/…: "Heroku 文件系统是短暂的 - 这意味着在 dyno 运行时对文件系统的任何更改只会持续到该 dyno 关闭或重新启动. 每个 dyno 都使用最近部署的文件系统的干净副本启动。此外,在正常操作下,dyno 将在称为“循环”的过程中每天重新启动。
猜你喜欢
  • 2019-09-01
  • 2020-06-06
  • 2012-12-10
  • 1970-01-01
  • 2021-12-01
  • 2018-04-27
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多