在 Google App Engine 开发服务器中组合 --backends 和事务性任务队列时出现问题?

Posted

技术标签:

【中文标题】在 Google App Engine 开发服务器中组合 --backends 和事务性任务队列时出现问题?【英文标题】:Problems combining --backends and transactional task queues in Google App Engine dev server? 【发布时间】:2012-02-13 17:51:30 【问题描述】:

我正在将一个相当大的 App Engine 应用程序上的一些功能移动到后端,突然开始在我通过 dev_appserver.py 运行时使用事务的地方出现一些错误:

ApplicationError: ApplicationError: 10001 Transaction(<handle: 0x1, app: "dev~MYAPPNAME", >) not found

我意识到只有当我通过 --backends 运行应用程序时才会出现问题。我猜这个问题正在发生,因为我有一个使用“transactional=True”将任务添加到队列的事务,即:

def txn():

    # make model changes

    taskqueue.add(url='/models/processupdate', params=my_params, transactional=True, queue_name='not_the_default_q')
  db.run_in_transaction(txn)

这是 dev_appserver 的“单线程”性质的结果吗?有解决办法吗?

【问题讨论】:

是否有堆栈跟踪错误?你能用它修改问题吗? 不幸的是我只是有上述错误。 【参考方案1】:

根据google doc here,如果你的任务是事务性的,你不能命名队列,事务任务只能添加到默认队列!

【讨论】:

你在哪里看到这个?我在那个页面上找不到。我们使用事务队列(带有名称)已经有一段时间了。当我引入使用后端的代码时,它才成为一个问题。 阅读最后一句:transactional=False 当在 db.run_in_transaction() 中调用此方法时相关。指示仅当成功提交封闭数据存储事务时才应添加此事务性任务。请注意,在这种情况下,此任务不能有用户指定的名称。 对,但这是指任务名称,而不是队列名称:code.google.com/appengine/docs/python/taskqueue/… 你的processupdate里面到底有什么?它在寻找交易吗?从错误信息来看,似乎没有找到交易ID。 不,不是在寻找交易。只是做一些相当无趣的数据存储更新。

以上是关于在 Google App Engine 开发服务器中组合 --backends 和事务性任务队列时出现问题?的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine Node.js 本地开发服务器是不是支持 SSL?

在 Google App Engine 开发服务器中组合 --backends 和事务性任务队列时出现问题?

用于开发 iPhone 推送通知服务的 Google App Engine 的 Java 替代方案是啥?

是否可以使用 Node.js 或其他一些服务器端 JavaScript 方法开发 Google App Engine 网络应用程序?

如何在 Google App Engine 中“运行”“Paypal 订阅服务”?

您是不是可以在使用 Google App Engine 开发的网站上使用 Amazon 的 s3?