设置app.yaml url处理程序时,如何将url格式化为脚本?

时间:2015-06-03 23:24:34

标签: python django google-app-engine cron wsgi

我不确定如何在app.yaml中为处理程序的脚本设置url。我尝试过关于设置cron工作的文档(https://cloud.google.com/appengine/docs/python/config/cron),但是我的crons在GAE中失败了。我也收到了这个错误: \myproject\app.yaml: threadsafe cannot be enabled with CGI handler: myprojectApp/dsProcess.aggregate

我认为文档假设我没有使用WSGI,但是我对WSGI的使用在某种程度上影响了在应用程序中访问脚本的方式。

这是我的项目结构及相关文件:

myproject/
    myproject/      (package for project)
        urls.py     (defers url handling to myprojectApp.urls)
    myprojectApp/   (package for actual app)
        urls.py
        dsProcess.py  ( contains the aggregate function my cron should call)
    app.yaml
    cron.yaml
    main.py

在app.yaml中,我不确定如何将url格式化为dsProcess.py的聚合函数:

的app.yaml

handlers:
- url: /aggDB
  script: myprojectApp/dsProcess.aggregate <-- unsure here

应该是myprojectApp.dsProcess.aggregate吗? myprojectApp.dsProcess.aggregate.pymyprojectApp.dsProcess.aggregate.app

我正在运行Python 2.7.9

cron.yaml

cron:
- description: aggregates db
  url: /aggDB
  schedule: every 1 mins

main.py

import django.core.handlers.wsgi    
application = django.core.handlers.wsgi.WSGIHandler()

myprojectApp / dsProcess.py

def aggregate():

myproject / urls.py myprojectApp / urls.py

我猜我不需要在aggDB/网址中为这些网址设置网址格式,因为app.yaml会为我注册并监听该网址格式。这是对的吗?

尽管如此,这里有两个urls.py:

的myproject / urls.py

urlpatterns = patterns('',
                       (r'^', include('myprojectApp.urls')),
                       )

myprojectApp / urls.py

urlpatterns = patterns('',
    ...
     #don't need to handle this here, let app.yaml handle it?  
    # (r'^aggDB/$', dsProcess.aggDStoJSON()),
)

我会使用wsgi影响我访问脚本的方式吗?如果是这样,怎么样和为什么?

1 个答案:

答案 0 :(得分:1)

这是一条Python路径,你使用点而不是斜线。

但是cron URL并没有什么特别之处:它们与项目中的任何其他URL完全相同,并遵循完全相同的规则。如果你想让它由Django处理,你根本不需要在app.yaml中添加特定的条目,只需让它使用现有的映射来存放其余的Django URL。