【问题标题】:Cron job not running with appenginecron 作业未与 appengine 一起运行
【发布时间】:2014-07-03 11:28:12
【问题描述】:

在 appengine 中,我创建了一个 cron 作业,该作业在 2 分钟间隔后执行,并将一些数据发布到我的 facebook 墙上。

但每两分钟后,当我在 appengine 中看到日志时,它会显示以下几行,

This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.

我的 Facebook 墙上没有任何内容。

但是当我手动执行 cron 作业 url(通过直接在浏览器中点击)时,应用程序会在我的墙上发布一些内容。

这是我的app.yaml

application: thisisreallyappname
version: 1
runtime: python27
api_version: 1
threadsafe: yes

builtins:
- remote_api: on

inbound_services:
- warmup

libraries:
- name: django
  version: latest

handlers:
- url: /_ah/queue/deferred
  script: djangoappengine.deferred.handler.application
  login: admin

- url: /_ah/stats/.*
  script: djangoappengine.appstats.application

- url: /media/admin
  static_dir: django/contrib/admin/media
  expiration: '0'

- url: /static/admin
  static_dir: django/contrib/admin/static/admin
  expiration: '0'

- url: /static
  static_dir: static
  expiration: '0'

- url: /.*
  script: djangoappengine.main.application

这是我的 urls.py

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    url(r'^crona/$', 'testapp.views.crona', name='crona'),
    url(r'^admin/', include(admin.site.urls)),
)+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

这里是视图,

def crona(request):
   logging.info("hello")
   croned=CronEntries.objects.all().order_by('posted_datetime')[0]

   if croned.email_id=='n*******@gmail.com':
      try:
         access_token="##############################################################"
         graph = facebook.GraphAPI(access_token)
         graph.put_object("me", "feed", message=croned.status_cron)
         croned.delete()
      except Exception as e:
         logging.info(e)
      else:
         return HttpResponse("ok")

这里是 cron.yaml

cron:
- description: post on fb
  url: /crona
  schedule: every 2 minutes

【问题讨论】:

  • 你的 cron.yaml 在哪里?
  • @DanielRoseman 我已经添加了。

标签: python facebook google-app-engine cron


【解决方案1】:

你的 url 处理程序 url(r'^crona/$', ... 需要一个斜杠,你的 cron url 会省略它。即使您将应用设置为附加斜杠,您也不希望使用 cron 或任务队列来执行此操作,因为您希望它们返回 200,而不是 301

【讨论】:

  • 谢谢,你能解释一下吗?
  • 当然。 $ 登录 url(r'^crona/$'... 表示 / 是 url 中的最后一个字符。 /crona 不匹配。 /crona/ 确实如此。解决方案是将尾部斜杠添加到 cron 作业 url:url: /crona/ 或从 url 处理程序中删除美元符号和斜杠:url(r'^crona'...
猜你喜欢
  • 2014-11-02
  • 2016-07-17
  • 2020-03-16
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多