【问题标题】:Django - Google App Engine Cron 300 ErrorDjango - Google App Engine Cron 300 错误
【发布时间】:2019-01-03 17:23:47
【问题描述】:

我可以通过访问“https://keel-test.appspot.com/tasks/test/”成功地运行我的“工作”。我使用返回 200 响应的“http://www.webconfs.com/http-header-check.php”测试了标头。

我成功将以下 cron.yaml 推送到 Google App Engines:

cron:
- description: "test"
  url: /tasks/test
  schedule: every 8 hours

我尝试通过 GCP Console 任务队列页面运行任务。但是,GCP 控制台说 CRON 作业返回 300 错误。除了页面由 CRON 运行时返回 301 和如果手动访问上面的 URL 时返回 200 之外,日志为零。

这里是 app.yaml:

runtime: python
env: flex
entrypoint: gunicorn config.wsgi:application

runtime_config:
  python_version: 3

【问题讨论】:

    标签: python django google-app-engine cron


    【解决方案1】:

    我在使用 Django 时遇到了同样的问题

    网址(urls.py): ... url(r'^health_check/', health_check, name='health_check'), ...

    我的后端启用了 SSL 重定向

    SECURE_SSL_REDIRECT = True

    看到应用引擎 crons 不遵循重定向,我不得不通过将端点添加到 settings.py 中的 SECURE_REDIRECT_EXEMPT 变量来禁用这一端点的重定向

    ... SECURE_REDIRECT_EXEMPT = [r'^health_check/'] ...

    【讨论】:

      【解决方案2】:

      您的 cron 作业正在命中 /tasks/test(没有尾部斜杠)。您的 url 处理程序不存在或有斜杠。

      尝试点击https://keel-test.appspot.com/tasks/test(没有斜线)。它重定向。因此,301

      您的网址处理程序:

      url(r'^tasks/test/$', investment_views.test, name='test_job')

      坚持有一个斜线。将其更改为:

      url(r'^tasks/test', investment_views.test, name='test_job')

      两者(带和不带斜杠,以及以test 开头的任何内容(例如:testing123)都将到达该处理程序。

      或者,如果您希望两者都工作,请使用带有 URL 结束信号 $ 符号的两个处理程序:

      url(r'^tasks/test$', investment_views.test, name='test_job')
      url(r'^tasks/test/$', investment_views.test, name='test_job')
      

      或者,如果您希望您的网址始终带有斜杠,请确保您的 cron 作业网址遵守该标准:

      cron:
      - description: "test"
        url: /tasks/test/
        schedule: every 8 hours
      

      【讨论】:

      • 我如上所述添加了一个尾随 slack,并通过“gcloud app deploy cron.yaml”重新上传了它。但是,我仍然收到 300 错误。这是 url 处理程序 "url(r'^tasks/test/$',invest_views.test, name='test_job'),"。
      • 抱歉,我将您的问题与另一个使用 Flask 的问题混淆了。更新我对 Django 的回答。
      • 感谢您的回复!但是,我没有关注,因为我的 cron.yaml 和 url 现在都有斜线,大约 30 分钟前我确实尝试了上面的代码(你刚刚更新它的内容)。我已更改我的 cron 处理程序以尝试“url:/tasks/test/”和“url:/tasks/test”)。
      • 所以,您有 2 个问题,1) URL,因为 /tasks/test 不匹配 r'^tasks/test/$' 2) SSL,因为 cron 请求被重定向到 https:
      • 没有。 Cron 作业发送 HTTP 请求。如果您强制重定向到 HTTPS,您将获得 301。您的 cron 网址需要可通过 HTTP 访问。
      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 2020-02-20
      • 2014-05-12
      • 2010-11-17
      • 1970-01-01
      • 2011-01-09
      • 2012-01-25
      • 1970-01-01
      相关资源
      最近更新 更多