#python #facebook #google-app-engine #cron
#python #Facebook #google-app-engine #cron
Вопрос:
В 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 ничего не опубликовано.
Но когда я вручную выполняю URL задания cron (нажимая непосредственно в браузере), приложение публикует что-то на моей стене.
Вот мой 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
Комментарии:
1. Где ваш cron.yaml?
Ответ №1:
Вашему обработчику URL url(r'^crona/$', ...
требуется косая черта в конце, которую ваш URL-адрес cron опускает. Даже если вы настроили свое приложение на добавление завершающей косой черты, вы не хотите делать это с помощью cron или taskqueue, потому что вы хотите, чтобы они возвращали 200
, а не 301
a.
Комментарии:
1. Спасибо, не могли бы вы, пожалуйста, объяснить это немного подробнее?
2. Конечно.
$
Входurl(r'^crona/$'...
означает, что/
это последний символ в URL./crona
не соответствует./crona/
выполняется. Решение состоит в том, чтобы либо добавить косую черту в конце к URL задания cron:url: /crona/
, либо удалить знак доллара и косую черту из обработчика URL:url(r'^crona'...