如何将谷歌应用引擎cron作业路由到模块和版本

时间:2014-08-04 20:06:42

标签: java google-app-engine cron

我有一个Google应用引擎cron作业,我想测试并运行特定的模块和版本。我该怎么做?

我已尝试在cron.xml中指定目标:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/purgeAll</url>
    <description>delete old entities</description>
    <schedule>every day 10:45</schedule>
    <timezone>America/Los_Angeles</timezone>
    <target>ninaddev</target>
  </cron>
</cronentries>

我还尝试在默认包中添加dipatch.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<dispatch-entries>
  <dispatch>
    <module>internal</module>
    <url>*/purgeAll</url>
  </dispatch>
</dispatch-entries>

结果是cron在指定的版本(ninaddev)上运行,但不在指定的模块(内部)上运行,我可以看到它在这里运行日志。

我认为这是因为调度文件无法定位默认版本https://developers.google.com/appengine/docs/java/modules/routing以外的版本:“您可以创建调度文件来覆盖未指定版本的URL的默认路由(如上所述) )“。

最后一件可能相关的事情是我将模块(默认和内部)一起上传到EAR结构中,如下所示:https://developers.google.com/appengine/docs/java/modules/

有关如何让“ninaddev”版本和“内部”模块运行cron的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

我能够将cron作业路由到特定的模块版本,但我已经在Python中尝试过它们。

我是这样做的:

  1. 我只将目标字段用于您的案例中的内部版本。
  2. 在发送时,我将所有内容路由到模块的某个URL路径(在您的情况下为* / ninaddev-url)。
  3. 在YAML表示法中(您也可以将它们与Java项目一起使用):

    cron.yaml

    cron:
    - description: new job
      url: /ninaddev-url
      target: internal
    

    dispatch.yaml

    dispatch:
    - url: '*/ninaddev-url'
      module: ninaddev
    

    如果需要,您可以保护对这些网址的访问权限。