有一种方法可以将cron指向使用中的域? 例如,我的cron在/ example上(在我的cron.yaml内部),此cron将始终在“ all_appspot_url / cron”上运行 如果我在example.com域上,我该如何直接在example.com/cron上运行cron?
编辑: 因此,为了澄清一下,现在我向该主机发出了cron请求:
example.appspot.com
如果我必须将cron转到另一个域,请从
example2.com
我必须手动进行管理吗?
example2 与 example
EDIT2:
好的,我在example.appspot.com
上有我的主要应用程序。
现在,如果我需要自定义域,例如我在example2.com
上有一个人,在example3.com
上有一个人,在example4.com
上有其他人,我需要为每个人运行cron“ customized”。
我必须使用实际的“域”,例如如果我在example3.com 上,则需要打印example3.com。
我认为有一些SDK函数可以用PHP“抓取”实际的主机名,但我找不到。
EDIT3:也许我只需要一个dispatch.yaml而不需要获取主机名?因为也许我可以将谁进入“ example / url / customUrl”路由到我的主应用程序。 不重定向
答案 0 :(得分:2)
您无需执行任何操作(除了确保您的代码未在请求的完整URL中假定某个域)。您应该能够将(手动)请求发送到相应的自定义域URL,并且它们也应该得到处理。
cron服务以及可能还有一些其他特定于GAE的服务(例如任务队列)在GAE基础结构内部运行,它们不了解自定义域映射。这就是cron服务使用GET
域发出appspot.com
请求的原因。
我什至怀疑这可能只是报告给您的应用程序(出于兼容性方面的考虑),但实际上,cron服务可能的实际实现甚至没有使用appspot.com
(即DNS)。
自定义域映射发生在GAE服务的边缘/外部。仅对于来自GAE基础设施外部的请求,这是一项额外的路由决策-确定应将请求定向到哪个GAE应用。内部GAE请求无需浪费时间进行此类查找。
考虑到这一点,我认为appspot.com
实际上是“直接”方式,而自定义域是更长的路径:)
不,您无法采取任何措施来更改此行为。
更新:
为澄清起见,您所讨论的地址是cron请求发送到的地址,是发给的,而不是发自的。所有Cron请求(针对所有应用)均从固定地址发送。来自Securing URLs for cron:
Google App Engine从IP地址
0.1.0.1
发出Cron请求。
Update2:
将同一应用程序映射到多个域时,您实际上并不需要您要询问的域检测功能:
如果您在应用程序中仅配置了一个cron作业,并由所有域共享,则该功能将无用:您将仅收到一个请求,检测到该域最多只能为您提供一个答案,因此您可以,最多只能处理一个域,而其他域将保持未处理状态。在这种情况下,您可以轻松地在单个处理程序内针对已配置的每个域进行迭代,因此该域在每次迭代中就已为人所知
如果每个域配置了一个cron作业,则可以为每个域使用不同的URL配置(例如/cron/my_domain
),而只需解析URL路径即可确定域< / p>