python - 将 URL 分配给 python 脚本以在 Google Cloud 上运行 cron 作业?
问题描述
我有一个简单的 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 应用程序中创建了一个新视图。
这需要一段时间才能弄清楚!
棘手的部分是 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
我仍然不完全明白为什么这会奏效。比我聪明的人,有笔记就跟进。
推荐阅读
- c++ - 为什么这两个代码给出不同的输出?// bits.c float_i2f
- docker - Docker Node-Alpine:puppeteer-core@1.20.0 在 page.pdf() 中抛出错误
- android - Android中的Google登录集成登录错误DEVELOPER ERROR
- java - 如何处理 ajax 确认对话框的是或否
- eclipse - Kotlin 无法使用 Eclipse 工作区分辨率
- amazon-web-services - 如何在 VPC 中有多个子网的数据库实例上只选择 1 个子网?
- javascript - laravel 按钮意外移动
- wpf - 使用 WPF 在 PowerShell 中创建窗口
- tensorflow - Keras 自定义损失函数产生奇怪的结果
- django - 如何在 django 中匹配 url.py 中的特定单词?