Pubnub 总是在 Django 应用程序中超时
Pubnub always times out in Django app
我正在构建一个 Django 应用程序来收听 Pubnub 提要并将消息存储在数据库中。我在应用的 apps.py
的 AppConfig
的 ready()
方法中创建了一个 pubnub 监听器。
在 Heroku 上启动我的应用程序后,我收到了一个非常无用的错误
2017-04-26T02:17:50.038060+00:00 heroku[web.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 30 seconds of SIGTERM
2017-04-26T02:17:50.038060+00:00 heroku[web.1]: Stopping remaining processes with SIGKILL
2017-04-26T02:17:50.134619+00:00 heroku[web.1]: Process exited with status 137
我怀疑 django 想要清理 AppConfig 进程并且因为那里有一个 pubnub 对象而感到不安。那是问题所在吗?我该如何解决?
我也看到了(至少通过示例隐含地)Heroku recommends using the twisted interface.我不是很糟糕吗?
相关代码如下:
我创建了一个 mypubnub.py 基于 Pubnub's hello world example:
from pubnub.pubnub import PubNub
from pubnub.pnconfiguration import PNConfiguration
from pubnub.callbacks import SubscribeCallback
class MySubscribeCallback(SubscribeCallback):
def presence(self, pubnub, presence):
pass
def status(self, pubnub, status):
pass
def message(self, pubnub, message):
pass # I'll actually do the storage here later
def create_pubnub():
pnconf = PNConfiguration()
pnconf.subscribe_key = 'sub-c-blargyblargblarg'
pnconf.publish_key = 'pub-c-blargyblargblarg'
pubnub = PubNub(pnconf)
pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels('achannel').execute()
return pubnub
我在 apps.py
from django.apps import AppConfig
中实例化 pubnub 内容
from .mypubnub import create_pubnub
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
pn = create_pubnub()
从服务器订阅是例外
虽然一些 PubNub 客户成功地做到了这一点,但从您的服务器端订阅通常是例外而不是规则。不过它确实有其正确的用例。
在这种情况下,最佳做法是使用 PubNub BLOCKS 到 POST
从 PubNub 网络内发布到您的服务器的每条消息,而不是让您的服务器监听一个频道或每个频道做同样的事情。
我正在构建一个 Django 应用程序来收听 Pubnub 提要并将消息存储在数据库中。我在应用的 apps.py
的 AppConfig
的 ready()
方法中创建了一个 pubnub 监听器。
在 Heroku 上启动我的应用程序后,我收到了一个非常无用的错误
2017-04-26T02:17:50.038060+00:00 heroku[web.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 30 seconds of SIGTERM
2017-04-26T02:17:50.038060+00:00 heroku[web.1]: Stopping remaining processes with SIGKILL
2017-04-26T02:17:50.134619+00:00 heroku[web.1]: Process exited with status 137
我怀疑 django 想要清理 AppConfig 进程并且因为那里有一个 pubnub 对象而感到不安。那是问题所在吗?我该如何解决?
我也看到了(至少通过示例隐含地)Heroku recommends using the twisted interface.我不是很糟糕吗?
相关代码如下:
我创建了一个 mypubnub.py 基于 Pubnub's hello world example:
from pubnub.pubnub import PubNub
from pubnub.pnconfiguration import PNConfiguration
from pubnub.callbacks import SubscribeCallback
class MySubscribeCallback(SubscribeCallback):
def presence(self, pubnub, presence):
pass
def status(self, pubnub, status):
pass
def message(self, pubnub, message):
pass # I'll actually do the storage here later
def create_pubnub():
pnconf = PNConfiguration()
pnconf.subscribe_key = 'sub-c-blargyblargblarg'
pnconf.publish_key = 'pub-c-blargyblargblarg'
pubnub = PubNub(pnconf)
pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels('achannel').execute()
return pubnub
我在 apps.py
from django.apps import AppConfig
from .mypubnub import create_pubnub
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
pn = create_pubnub()
从服务器订阅是例外
虽然一些 PubNub 客户成功地做到了这一点,但从您的服务器端订阅通常是例外而不是规则。不过它确实有其正确的用例。
在这种情况下,最佳做法是使用 PubNub BLOCKS 到 POST
从 PubNub 网络内发布到您的服务器的每条消息,而不是让您的服务器监听一个频道或每个频道做同样的事情。