0

我在谷歌应用引擎中运行一个 python 2.7 应用程序。我有一个非常基本的函数,它向任务队列发送一个帖子,然后它发布到一个函数,该函数基于解析为邮件模板的一些变量构造和发送电子邮件。

我不确定任务队列是否卡在我的应用程序的旧版本或问题是什么,但是当我更新发送电子邮件的文件中的代码并上传更改时,这些更改不会导致任何电子邮件应用程序发送的文本。就像它使用了错误的旧版本文件一样。

这个问题的原因可能是什么?

编辑

请注意,这是我到目前为止所尝试的。

  • 我尝试将应用程序更新到新版本,但没有任何变化

  • 我尝试编辑项目中的其他文件,它们似乎都正确更新

  • 我正在使用 oauth 方法上传 .bat 文件来运行命令,并且那里不需要刷新,因为更新应用程序版本没有帮助

  • 我尝试将我想使用的电子邮件代码从其旧类中移出到一个新类中,将 main.py url 更改为指向新类,它仍然使用旧的电子邮件文本

  • 我尝试删除用于触发电子邮件的旧 url并使用全新的 url,它仍然使用旧的电子邮件文本

  • 我尝试使用 version-number.project-id.appspot.com 格式测试应用程序,它仍然使用旧的电子邮件文本,该版本中的任何地方都不存在

所以重申一下,我正在尝试使用我的应用程序发送一封电子邮件,即使旧消息被完全删除,电子邮件代码被移动到一个新文件和一个新的应用程序版本,我仍然以某种方式发送旧电子邮件文本。

编辑 2

这是队列任务的相关代码:

taskqueue.add(url="/emailnotify", countdown = 1, 
                  params = {"email":tPaypalEmail, "gold":tGoldAmount, 
                            "name":tCustomerName, 'key':tOrderKey} )

这是应该发送电子邮件的类中的相关代码:

from cStringIO import StringIO
import webapp2

from models.order import Order
from google.appengine.api import mail
from google.appengine.ext import db, webapp

from _stringmethods import StringMethods
from _numbertogp import NumberToGp

class EmailNotify(webapp2.RequestHandler):
    def post(self):

        tPaypalEmail = self.request.get('email')
        tCustomerName = self.request.get('name')
        tGoldAmount = self.request.get('gold')
        tOrderKey = self.request.get('key')

        tOrder = Order()
        tOrder = Order.get(tOrderKey)

        tVerificationCode = tOrder.orderVerificationCode

        tGoldInt = int(tGoldAmount)        
        tGoldAmount = NumberToGp.ConvertIntToBet(tGoldInt)

        tVerificationFile = cStringIO.StringIO()
        tVerificationFile.write(str(tVerificationCode))        

        #new message which does not appear in the app emails
        tMessage = """Long string formatted message""" % (str(tCustomerName), str(tGoldAmount), str(tVerificationCode)) 

        logging.debug(str(tMessage)) #this does not appear in the logs

        message = mail.EmailMessage()
        message.sender = "Smokin Mils Goldshop <Smokin.Mils.Goldshop@gmail.com>" #this email user is added as an app owner
        message.to     = tPaypalEmail
        message.subject = "SmokinShop Order Details"
        message.body   = tMessage
        message.attachments = [('verification-code.txt', tVerificationFile.getvalue())]

        message.send()

编辑 3

针对我发布此问题的reddit问题,这里是queue.yaml

queue:
- name: default
  rate: 60/s
  bucket_size: 50
  retry_parameters:
    min_backoff_seconds: 2
    max_backoff_seconds: 200
    task_retry_limit: 10
4

1 回答 1

0

从 Eclipse 部署几行电子邮件 servlet(在 GAE/J 上)时遇到了类似的问题。在尝试了版本控制、覆盖旧版本、删除版本、玩转安全、更改类名、更改类签名(构造函数)MemCache 等后终于修复了它(这些都不起作用。)

底线:删除 WEB-INF 目录中的“部署”和“类”文件夹。再次清理/构建您的项目。然后上传到 App Engine。

这种“深度清洁/重新开始”的方法似乎起到了作用。令人讨厌的是,这似乎从来没有必要。只有当我开始使用外部库处理电子邮件和 PDF 代码时,这似乎才引起问题。我最近也升级到了 App Engine 1.8。很想知道这个问题的根本原因,但我已经厌倦了谷歌在这一点上为他们进行调试。很高兴我似乎找到了解决方案。

有趣的背景讨论:http ://code.google.com/p/googleappengine/issues/detail?id=7335

于 2013-05-24T03:08:58.243 回答