python - 将 URL 分配给 python 脚本以在 Google Cloud 上运行 cron 作业?

标签 python django cron google-cloud-platform

我有一个简单的 Django 应用程序,它显示从数据库中提取的一些数据。我有一个更新数据的 Python 脚本,我希望它每天运行。我无法弄清楚如何格式化我的 app.yaml 处理程序,以便它们响应 cron.yaml。

cron.yaml 看起来像这样:

cron:
- description: "daily update"
  url: /go
  schedule: every 24 hours

app.yaml 看起来像这样(减去一些敏感部分):

runtime: python
entrypoint: gunicorn -b :$PORT rcg_new.wsgi # specific to a GUnicorn HTTP server deployment
env: flex

handlers:
- url: /static
  static_dir: static
- url: /go
  script: scripto.app

runtime_config:
  python_version: 3

脚本如下所示:

import pandas as pd
import numpy as np
import requests
import webapp2
import urllib2
import urllib3
import certifi
import json
import re
from rcg_func_dj import pull_rc, pull_artists, artist_cycle, tally

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rcg_new.settings")
import django
django.setup()
from rcg_app.models import Gender, Groups

http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
spot_id = os.environ['SPOT_ID']
spot_sec = os.environ['SPOT_SEC']

class update_dbs(webapp2.RequestHandler):
    def get(self):

        self.response.headers["Content-Type"] = "text/html"
        self.response.write('running rcg...')
        rc = pull_rc(spot_id, spot_sec)
        artists_unprocessed = pull_artists(rc)
        artists_processed = artist_cycle(artists_unprocessed)
        tally(artists_processed)
        self.response.write('rcg done!')


routes = [('/go', update_dbs)]
app = webapp2.WSGIApplication(routes, debug=True) 

该脚本有效,因为我首先用它来填充数据库!

它在任务队列中显示良好,但当我尝试运行它时给我一个“失败”状态。但日志中没有显示任何内容。

最佳答案

我从未通过 webapp 和 app.yaml 完成这项工作,但我确实找到了解决方法:我在运行脚本的 Django 应用程序中创建了一个新 View 。

这花了一段时间才弄清楚!

棘手的部分是 cron 作业正在进行一个调用,涉及从“url/script/”到“url/script”等重定向,并且它只会进行初始调用,而不进行重定向。

因此,当您在 Django 应用程序的“urls.py”文件中定义路径时,请确保不要添加尾部斜杠!

它应该看起来像这样:

urlpatterns = [
    path('script', views.script, name='script')
]

...不是这样的:

urlpatterns = [
    path('script/', views.script, name='script')
]

虽然 cron.yaml 看起来像这样:

cron:
- description: "daily update"
  url: /app/script/
  schedule: every 24 hours

我仍然不完全明白为什么这会起作用。比我聪明的人,如果你有笔记,请跟进。

关于python - 将 URL 分配给 python 脚本以在 Google Cloud 上运行 cron 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231632/

相关文章:

python - Django模板转换为字符串

python - 在第一个图形仍然打开时用 matplotlib 绘制第二个图形

python - 使用 django 在 IIS 上创建 python 文件时出现错误 500

Python Django easy-maps 不呈现谷歌地图

python - 如何在 pandas 中将 .loc 与 groupby 和两个条件一起使用

python - 如何使用 django 和/或 flask 强制读取 Postgres 中的只读副本?

unix - 在 UNIX 中递归定位最近更新的文件

php - 担心有人会运行仅用于 cron 作业的 php 脚本

python - 分析和改进 Django 的 ORM (SORT) 生成的查询的性能

linux - 使用 crontab 运行 python 脚本@reboot