2017-04-26 11 views
0

私はPubnubフィードを聞いてメッセージをデータベースに保存するDjangoアプリを構築しています。アプリのapps.pyAppConfigready()メソッドでpubnubリスナーを作成します。 Herokuの上の私のアプリを起動する際にPubnubはいつもDjangoアプリでタイムアウトします

は、私はDjangoはのAppConfigプロセスをクリーンアップしたいとそこにぶらぶらpubnubオブジェクトがあることを動揺なっている疑いがある

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 

本当に役に立たないエラーが発生します。それは問題ですか?どうすれば修正できますか?

私もそれを参照してください(少なくとも暗黙的に例で)Heroku recommends using the twisted interface.私はそうではないのですか?

ここに関連するコードです:

私はPubnub's hello world exampleに基づいmypubnub.pyを作成:

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 

私はdjango.appsからapps.pyでpubnubのものがのAppConfig

from .mypubnub import create_pubnub 

class MyAppConfig(AppConfig): 
    name = 'myapp' 

    def ready(self): 
     pn = create_pubnub() 
+0

私はDjangoの専門家でもPythonでもありませんが、apps.pyの有効範囲/ライフサイクルは何ですか?それがウェブリクエストの期間だけ実行されている場合、サブスクライブは長期実行(常にオン)プロセスなので、それは問題になります。それが問題かもしれないかどうか私に教えてください。 –

+0

@CraigConover私はそれがかなりおそらく問題だと思います。私はDjangoも新しく、Pythonのほとんどのものとは異なり、apps.pyまたはAppConfigオブジェクトのスコープは明示的ではありません。永続的な格納場所がDjangoのどこにあるのかはわかりません。この時点で他の人が体重を増やすことができれば、それは本当に役に立ちます。 – ericksonla

+0

これを読んでくださいhttp://stackoverflow.com/questions/32795227/what-is-the-purpose-of-apps-py-in-django-1-9しかし、一般に、あなたがあなたのサーバから購読しているなら、それは赤旗。サーバーからの購読は、標準ではなく例外です。ベストプラクティスは、PubNub Network内からパブリッシュされた各メッセージをサーバーにリスンするのではなく、[PubNub BLOCKS](https://www.pubnub.com/docs/blocks/introduction)を使用してPOSTすることですチャネルまたはすべてのチャネル。 –

答えて

0

をインポートすることをインスタンス化サーバーからの購読は例外です

一部のPubNubのお客様は正常に機能しますが、サーバー側から購読するのは一般的にルールではなく例外です。しかし、それは適切なユースケースを持っています。

この場合は、サーバがチャネルまたはすべてのチャネルで同じことを行うのではなく、PubNubネットワーク内からパブリッシュされた各メッセージをPubNub BLOCKSPOSTにすることをお勧めします。

関連する問題