1

nginxの背後にあるRamSessionに基づく独自のセッションを使用してcherrypyアプリケーションを実行しています。問題は、リクエストごとにセッションIDが変更されることです。問題は、リクエストが行われるたびに別のワーカーに送信されるため、セッションが保存されることだと思いますが、次のリクエストでは、次に利用可能なワーカーによって認識されません(残念ながら、動作に関する知識が限られています)。ワーカーの数を1に設定すると、すべてが期待どおりに機能します。私はおそらくFileSessionまたは任意のタイプのDBベースのセッションハンドラーを使用できることを知っていますが、これに対する解決策があるかどうかを知りたかっただけです。ありがとう

これが私のアップスタートスクリプトです:

description "uwsgi tiny instance"
start on runlevel [12345]
stop on runlevel [06]

exec /home/web/.virtualenvs/myenv/bin/uwsgi --uid web -H /home/web/.virtualenvs/myenv -w myapp.wsgi -p 1 -M -s 127.0.0.1:3031

これが私のセッションです:

class MySession(sessions.RamSession):
    def clean_up(self):
        """Clean up expired sessions."""
        now = self.now()
        for id, (data, expiration_time) in copyitems(self.cache):
            if expiration_time <= now:
                try:
                    active = Mongo(ActiveSession).find_one('active', self.cache['active'])
                    Mongo(ActiveSession).remove(active)
                except:
                    print "Failed to remove active session object."
                try:
                    del self.cache[id]
                except KeyError:
                    pass
                try:
                    del self.locks[id]
                except KeyError:
                    pass
        # added to remove obsolete lock objects
        for id in list(self.locks):
            if id not in self.cache:
                self.locks.pop(id, None)

と私の設定:

config = {
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.path.join(current_dir, 'media/public')
    },
    '/fotos': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.path.join(current_dir, 'media/fotos')
    },
    '/' : {
        'tools.sessions.on': True,
        'tools.sessions.name': 'myapp'
        'tools.sessions.storage_type': 'my',
        'engine.autoreload_on': False
    }
}
4

1 に答える 1

1

あなたの直感は正しいです:RamSessionは一度に1つのプロセスに制限されています。簡単な解決策は、FileSession(すべてのワーカーが同じファイルシステムにアクセスできる場合)またはDBセッションに切り替えることです。あなたの労働者がかなり分散していると仮定すると、おそらく後者です。

于 2012-10-03T15:14:42.637 に答える